【发布时间】:2021-07-26 22:12:14
【问题描述】:
我目前正在用 Javascript 中的异步函数进行试验,我偶然发现了一个案例,我想按照它们在数组中的放置顺序执行一组异步函数。
我还希望是否可以将参数传递给异步函数。使用我现在的solution,两个带参数的函数先同时执行,然后其他两个函数一个接一个地执行。
const asyncOne = async (value = "no value passed to async 1") => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(value);
resolve();
}, 1000);
});
};
const asyncTwo = async (value = "no value passed to async 2") => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(value);
resolve();
}, 1000);
});
};
const sequence = async tasks => {
const resolve = Promise.resolve(null);
await tasks.reduce(
(promise, task) =>
promise.then(() => (typeof task === "function" ? task() : task)),
resolve
);
};
(async () => {
const res = await sequence([asyncOne("first"), asyncTwo, asyncOne, asyncTwo("last")]);
})();
预期输出:
"first"
"no value passed to async 2"
"no value passed to async 1"
"last"
实际输出:
"first"
"last"
"no value passed to async 2"
"no value passed to async 1"
【问题讨论】:
-
首先,您不应该将
async与new Promise混合和匹配。
标签: javascript asynchronous promise sequence