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
})();
添加回答
舉報