我正在尝试了解异步如何在javascript中工作。我无法处理创建异步的1件事:与其他promise生成器和回调或webAPI的异步函数?
这是一个代码。如果我正在使用settimeout函数,则所有功能都可以正常工作,但是如果我使用周期,则某些功能将无法预测;然后我使用settimeout结果显示1和1的超时,但同时显示周期结果
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function sleep() {
console.time("abc");
await timeout(3000);
console.timeEnd("abc");
}
sleep();
console.time();
var z = 1;
for (let i = 1; i < 10000; i++) {
for (let j = 1; j < 10000; j++) {
z *= j;
}
z *= i;
}
console.timeEnd();
//second var
function second(ms) {
return new Promise(resolve => {
var z = 1;
for (let i = 1; i < 50000; i++) {
for (let j = 1; j < 50000; j++) {
z *= j;
}
z *= i;
}
resolve();
});
}
// function timeout(ms) {
// return new Promise(resolve => setTimeout(resolve, ms));
// }
async function sleep() {
console.time("abc");
await second();
console.timeEnd("abc");
}
sleep();
console.time();
var z = 1;
for (let i = 1; i < 10000; i++) {
for (let j = 1; j < 10000; j++) {
z *= j;
}
z *= i;
}
console.timeEnd();
//第一个结果显示超时显示1比1
默认值:932.822998046875ms
abc:3000.555908203125ms
//秒结果同时显示
默认:913.716064453125ms
abc:4396.77490234375ms
答案 0 :(得分:-1)
您正在使用的常规for
循环在进行下一次迭代之前不会等待Promise的解析。您可以使用像bluebird这样的库,该库针对Promise处理进行了优化(尤其是对于集合),也可以使用for (i in arr){}
循环。