promise内部的多个resolve()调用返回异步函数



我有下面的testAsync函数,它应该在调用resolve()后返回解析的promise。

async function wait(time) {
await new Promise((resolve, reject) => { setTimeout(resolve, time) });
}
async function testAsync(testParam) {
return new Promise(async (resolve, reject) => {
try {
await wait(2000); // do some async work
if (testParam === 1) {
console.log("test param is equal to 1");
resolve("first IF");
}
if (testParam < 10) {
console.log("test param is smaller than 10");
resolve("second IF");
}
} catch (error) {
reject(error);
}
});
}
(async () => {
let result = await testAsync(1);
console.log(result);
})();

控制台输出:

test param is equal to 1
test param is smaller than 10
first IF

我的问题是,如果我以一种包括更多对resolve()的非独占调用的方式来构建代码,那么代码确实解决了它命中的第一个调用,但它不会在那个地方停止并返回。为什么会继续?resolve()不是松散地等于return吗?我应该在每次调用resolve()之后添加return吗?

return new Promise(async (resolve, reject) => {是反模式。在函数前面添加async将已经返回Promise。new Promise必须仅用于将基于none Promise的异步函数转换为使用Promise的函数。

resolve((是否不松散地等于return?

它只是在某种意义上相等,即它设置了promise的"return"值,但它不会破坏执行流。因此,如果您想防止执行后续代码,则需要在解析后放置return

但正如我已经说过的,所示的结构无论如何都是反模式的,testAsync应该是这样的:

async function testAsync(testParam) {
await wait(2000); // do some async work
if (testParam === 1) {
console.log("test param is equal to 1");
return "first IF";
}
if (testParam < 10) {
console.log("test param is smaller than 10");
return "second IF";
}
}

wait更有可能是这样写的:

function wait(time) {
return new Promise((resolve, reject) => { setTimeout(resolve, time) });
}

最新更新