Javascript 我怎样才能申请延期呢?那我保证?

Javascript 我怎样才能申请延期呢?那我保证?,javascript,asynchronous,promise,async-await,es6-promise,Javascript,Asynchronous,Promise,Async Await,Es6 Promise,我有以下职能: 异步打字(what,where){}-模拟某人输入文本 异步typeerase(其中{}-类似于typewrite,但模拟某人按backspace键 typetimer(){}-返回一个承诺,随机间隔以模拟键入速度 基本上,我想做的是在typewrite函数完成后,我想在一个小延迟后擦除文本。我试图用设置超时来人为地延迟它,但这似乎不起作用 以下代码按预期工作 typewrite('helloworld!',target.),然后(erase=>typeerase(target

我有以下职能:

异步打字(what,where){}
-模拟某人输入文本
异步typeerase(其中{}
-类似于typewrite,但模拟某人按backspace键
typetimer(){}
-返回一个承诺,随机间隔以模拟键入速度

基本上,我想做的是在
typewrite
函数完成后,我想在一个小延迟后擦除文本。我试图用
设置超时来人为地延迟它,但这似乎不起作用


以下代码按预期工作

typewrite('helloworld!',target.),然后(erase=>typeerase(target))

let typetimer=(fmin,fmax)=>(
新承诺(res=>setTimeout(res,Math.floor(Math.random()*(fmax-fmin+1))+fmin))
); 
const textarea=document.getElementById('textarea');
异步函数打字(什么,在哪里){
让当前_文本=“”;
const typespeed_min=50;
const typespeed_max=150;
for(设i=0;i0){
等待打字计时器(擦除速度最小值,擦除速度最大值)
当前文本=当前文本。子字符串(0,当前文本。长度-1);
其中.innerHTML=当前_文本;
}  
}
打字('您好,我是一个异步函数!',textarea)
。然后(擦除=>typeerase(textarea))
html{
字体系列:“Courier New”;
字体大小:粗体;
字体大小:15磅;
}

简短回答:
设置超时
不是那样工作的。您应该可以这样做:

typewrite('Hello world!', target)
    .then(erase => setTimeout(() => typeerase(target), 50000));
详细回答:您可能应该使用一个helper方法来包装
setTimeout
,以产生所需的延迟(显示了一个示例)

。。。然后使用
wait

await typewrite('Hello world!', target);
await delay(50000);
await typeerase(target);

setTimeout
接受函数作为参数。使用
设置超时(类型擦除(目标)
,您不是在传递函数,而是在立即调用函数,并传递其返回值。@一定的性能,所以如果我做对了,我基本上应该创建一个额外的承诺层,类似于一个
延迟
函数,该函数返回超时承诺,然后才调用
类型擦除()
功能,或者有没有更优雅的方法来实现这一点?谢谢你的体育精神,兄弟!:):-)当然。良好的团队合作精神。我仍在试图弄清楚为什么有人否决了你的答案。他最初的答案中有一个错误(但不是我否决了)。我真的很感谢你对DownvNote的评论,而你可能是修正它的人:)谢谢@一个简单的问题,我对你答案的最后一部分有点困惑,“然后使用
wait
”。额外的
等待
的原因是什么?如果将延迟应用于
,那么(()=>delay(ms)),它不起作用吗?嗯。。。为什么不直接设置超时(解析、毫秒、args)
?另外,
resolve
只需要一个参数,所以传播是没有意义的。也许有一个简单的问题,bind(null,…args)
背后的原因是什么?
这个
关键字似乎没有任何用处。@Jonaswillms我认为他使用的
打字
函数在参数中解决了一个名为
擦除
的问题。因此,如果他想在
中使用它,那么在延迟之后,他需要一种方法将
erase
参数转到下一个
。然后
回调。实际上,我认为
resolve
只能用一个参数进行解析,所以也许我应该将
…args
更改为
arg
。噢@jonaswillms!我不知道
setTimeout
比前两个需要更多的参数,这真的很酷!我通过回答问题学到了一些东西!更新。
typewrite('Hello world!', target)
    .then(() => delay(50000))
    .then(() => typeerase(target));
await typewrite('Hello world!', target);
await delay(50000);
await typeerase(target);