Javascript承诺等待解释
我只想了解承诺和等待是如何协同工作的。请看以下代码:Javascript承诺等待解释,javascript,promise,async-await,Javascript,Promise,Async Await,我只想了解承诺和等待是如何协同工作的。请看以下代码: console.log("One: Started"); setTimeout(function(){console.log("One: Completed")}, 1000); console.log("Two: Started"); setTimeout(function(){console.log("Two: Completed")}, 2000); console.log("Three: Started"); setTimeout(f
console.log("One: Started");
setTimeout(function(){console.log("One: Completed")}, 1000);
console.log("Two: Started");
setTimeout(function(){console.log("Two: Completed")}, 2000);
console.log("Three: Started");
setTimeout(function(){console.log("Three: Completed")}, 3000);
因此,这当然会记录:
One: Started
Two: Started
Three: Started
One: Completed
Two: Completed
Three: Completed
我想在下一个开始之前完成这个。我写这篇文章是因为我理解了承诺和等待,但这不起作用。请有人尝试编辑此代码以使其正常工作请给我一个解释,因为我正在努力理解承诺并等待
async function LogAll() {
console.log("One: Started");
await function() {
return new Promise((resolve, reject) => {
setTimeout(function(){
console.log("One: Completed");
resolve();
}, 1000);
});
}
console.log("Two: Started");
await function() {
return new Promise((resolve, reject) => {
setTimeout(function(){
console.log("Two: Completed");
resolve();
}, 2000);
});
}
console.log("Three: Started");
await function() {
return new Promise((resolve, reject) => {
setTimeout(function(){
console.log("Three: Completed");
resolve();
}, 3000);
});
}
}
LogAll();
你需要等待承诺,而不仅仅是功能。当您
等待函数…
(不调用它)时,函数将作为表达式求值,然后被丢弃。只需调用以下函数:
异步函数LogAll(){
console.log(“一:启动”);
等待(函数){
返回新承诺((解决、拒绝)=>{
setTimeout(函数(){
控制台日志(“一个:已完成”);
解决();
}, 1000);
});
})();
log(“两个:已启动”);
等待(函数){
返回新承诺((解决、拒绝)=>{
setTimeout(函数(){
控制台日志(“两个:已完成”);
解决();
}, 2000);
});
})();
log(“三:启动”);
等待(函数){
返回新承诺((解决、拒绝)=>{
setTimeout(函数(){
控制台日志(“三:已完成”);
解决();
}, 3000);
});
})();
}
LogAll()异步函数的
声明定义了一个异步函数
,该函数返回一个AsyncFunction对象
async函数
可以包含一个wait
表达式,该表达式暂停执行async函数
并等待传递的Promise的
解析,然后恢复async函数的
执行并返回解析值
函数resolveAfter2Seconds(){
返回新承诺(解决=>{
设置超时(()=>{
决议(“调用”);
}, 2000);
});
}
异步函数asyncCall(){
var result=等待resolveAfter2Seconds();
控制台日志(结果);
//预期产出:“已解决”
log('called');
}
异步调用()代码>什么是异步函数:
它是一个返回AsyncFunction对象的函数,类似于Promissions。如果抛出错误,对象将拒绝,否则当返回值时,对象将解析
异步函数是较新的,在它们存在之前,有不同的方法来编写异步代码:承诺(rxjs的一部分)、可观察(“无限承诺”)、用于计时事件的回调
等待关键字是什么:
在Javascript中,await
关键字只能在具有以下语法的async
函数中使用:
[returnValue]=等待表达式代码>
其中表达式可以是承诺或异步代码返回的任何其他值
wait
告诉代码停止并等待该值
否则,上述表达式中的returnValue
将立即被赋予一个值(很可能是未定义的),并且代码将在不阻塞的情况下继续。在代码中经过一些未知时间和未知点后,函数将最终返回,returnValue
将最终收到正确的值。但是,可能代码向前推进,错误地假设您已经定义并更新了值,可能会失败
尝试在不使用async Wait的情况下运行代码段。它们是显示相应同步代码的反例:
示例1:所有承诺立即开始
函数LogAll(){
console.log(“一:启动”);
新承诺((解决、拒绝)=>{
setTimeout(函数(){
控制台日志(“一个:已完成”);
解决();
}, 1000);
});
log(“两个:已启动”);
新承诺((解决、拒绝)=>{
setTimeout(函数(){
控制台日志(“两个:已完成”);
解决();
}, 2000);
});
log(“三:启动”);
新承诺((解决、拒绝)=>{
setTimeout(函数(){
控制台日志(“三:已完成”);
解决();
}, 3000);
});
}
LogAll()代码>非常感谢!这太完美了。对不起,我的问题是XD,但这教会了我很多!只需添加()在函数定义的末尾,紧跟在之后的code>等待调用它们并返回承诺。您不需要将整个函数括起来。你也可以看看