1 回答
TA贡献1828条经验 获得超4个赞
您可以使用超时 Promise来延迟函数的执行,而不是setTimeout.
您的代码的问题是,即使您将async函数传递给setTimeout它也不会停止当前函数的执行。setTimeout只会将任务移动到微任务队列并执行传递给它的函数。但它不会导致您的父函数停止,因为传递给的函数setTimeout不会立即调用 - 它稍后会在不同的时间、不同的地方调用。
(async () => {
const serverOperation = () => new Promise(resolve => setTimeout(() => resolve('server op'), 2000));
const myOtherFunction = results => console.log('results', results);
const objectsArray = [{}, {}, {}];
const results = [];
// used for delaying operations
const timeoutPromise = () => new Promise(resolve => setTimeout(() => resolve(), 3000));
const myFunc = async arr => {
const el = arr.shift();
if (!el) {
// finish of calling recursive function
return;
}
// some big server operation
const result = await serverOperation();
results.push(result);
// need to wait for some time
await timeoutPromise();
console.log(Date.now());
await myFunc(arr);
};
await myFunc(objectsArray);
await myOtherFunction(results); // <= postprocessing results
})();
添加回答
举报
