在没有promise.defer
的情况下,我们可以使用Promise
的构造函数和async/await
语法来同时使用promises
和循环。
首先,我们可以创建一个空的Promise
数组,用于存储每个循环迭代中创建的Promise
对象。然后,在循环中,我们可以使用Promise
的构造函数来创建一个新的Promise
对象,并将其添加到数组中。在每个循环迭代中,我们可以使用resolve
函数来解决Promise
对象,并将其结果存储在数组中。
接下来,我们可以使用Promise.all
方法来等待所有的Promise
对象都解决,并返回一个新的Promise
对象,该对象将在所有Promise
对象都解决后被解决。最后,我们可以使用async/await
语法来等待这个新的Promise
对象的解决,并获取最终的结果。
下面是一个示例代码:
function asyncLoop(iterations) {
let promises = [];
for (let i = 0; i < iterations; i++) {
promises.push(new Promise((resolve) => {
// 在这里执行异步操作,并在完成后调用 resolve 函数
setTimeout(() => {
resolve(i);
}, 1000);
}));
}
return Promise.all(promises);
}
async function main() {
try {
const results = await asyncLoop(5);
console.log(results); // 输出 [0, 1, 2, 3, 4]
} catch (error) {
console.error(error);
}
}
main();
在这个示例中,asyncLoop
函数接受一个参数iterations
,表示循环的次数。在循环中,我们创建了一个Promise
对象,并将其添加到promises
数组中。在每个循环迭代中,我们使用setTimeout
模拟一个异步操作,并在完成后调用resolve
函数来解决Promise
对象,并将其结果存储在数组中。
最后,我们使用Promise.all
方法等待所有的Promise
对象都解决,并返回一个新的Promise
对象。在main
函数中,我们使用async/await
语法等待这个新的Promise
对象的解决,并获取最终的结果。
这种方法可以同时使用promises
和循环,而不需要使用promise.defer
。它适用于需要在循环中执行异步操作,并在所有操作完成后获取结果的场景。
领取专属 10元无门槛券
手把手带您无忧上云