如果我使用 async/await,它不会按顺序 运行
If I use async/await, it doesn't run in order
我对 async/await 执行有疑问。
示例代码
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
但是,如果附上return,结果值如下。
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
这是为什么?如果你能解释一下,我将不胜感激。
在第一种情况下,您只需等待外部承诺(即 firstMethod
和 secondMethod
函数),而不会等待由 new Promise
创建的内部承诺,而只是运行 在后台完成。
在第二种情况下,由于 promise 解包 你等待返回的内部 promises 与外部函数 promises 一起。
在第一个示例中,这 2 个函数没有按顺序 运行 的原因是因为您没有等待任何东西。如果您尝试从第一个示例中的函数定义中删除 async
,您将得到相同的结果,因为该函数不需要 async
,因为它不需要 await
。你可以做些什么来获得相同的结果,第二个例子是在 new Promise
.
之前添加 await
注意: 你也不需要第二个例子中的 async
因为你没有等待任何东西,你只是返回一个 Promise
您在其中等待范围之外。
我对 async/await 执行有疑问。
示例代码
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
但是,如果附上return,结果值如下。
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
这是为什么?如果你能解释一下,我将不胜感激。
在第一种情况下,您只需等待外部承诺(即 firstMethod
和 secondMethod
函数),而不会等待由 new Promise
创建的内部承诺,而只是运行 在后台完成。
在第二种情况下,由于 promise 解包 你等待返回的内部 promises 与外部函数 promises 一起。
在第一个示例中,这 2 个函数没有按顺序 运行 的原因是因为您没有等待任何东西。如果您尝试从第一个示例中的函数定义中删除 async
,您将得到相同的结果,因为该函数不需要 async
,因为它不需要 await
。你可以做些什么来获得相同的结果,第二个例子是在 new Promise
.
await
注意: 你也不需要第二个例子中的 async
因为你没有等待任何东西,你只是返回一个 Promise
您在其中等待范围之外。