[英]If I use async/await, it doesn't run in order
我对异步/等待执行有疑问。
示例代码
async firstMethod(){
new Promise((resolve, reject)) => {
setTimeout(() => {
resolve("test1");
}, 3000);
});
}
async secondMethod() {
new Promise((resolve, reject)) => {
setTimeout(() => {
resolve("test2");
}, 1000);
});
}
await firstMethod();
await secondMethod();
因此,当执行这两个方法时,会得到以下结果。
test2
test1
但是,如果附加返回,则结果值如下。
async firstMethod(){
return new Promise((resolve, reject)) => {
setTimeout(() => {
resolve("test1");
}, 3000);
});
}
async secondMethod() {
return new Promise((resolve, reject)) => {
setTimeout(() => {
resolve("test2");
}, 1000);
});
}
await firstMethod();
await secondMethod();
test1
test2
这是为什么? 如果您能解释一下,我将不胜感激。
在第一种情况下,您只需等待外部 Promise(即firstMethod
和secondMethod
函数), new Promise
创建的内部 Promise 不会被等待,而只是在后台运行完成。
在第二种情况下,您等待返回的内部承诺以及外部 function 承诺。
在第一个示例中,这两个函数没有按顺序运行的原因是因为您没有等待任何东西。 如果您尝试从第一个示例中的 function 定义中删除async
,您将得到相同的结果,因为 function 不需要async
,因为它不需要await
。 在第二个例子中,你可以做的是在new Promise
之前添加一个await
来获得相同的结果。
注意:您也不需要第二个示例中的async
,因为您没有等待任何东西,您只是返回一个Promise
,您在其中等待 scope。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.