我正在尝试将回调转换为异步/等待,但发现异步/等待比现有回调慢得多。任何人都可以看到我的异步/等待有什么问题吗?
for (var i = 0; i < balance; i++) {
tokenOfOwnerByIndex().call(i).then((id) => {
tokenURI().call(id).then((uri) => {
console.log(uri);
});
});
}
for (var i = 0; i < balance; i++) {
var id = await this.getTokenOfOwnerByIndex(i);
var uri = await this.getTokenURI(id);
console.log(uri);
}
最佳答案
在第一个版本中,tokenOfOwnerByIndex
被称为返回 promise 。您通过 then
附加回调,然后循环继续。 promise 最终会解决,但您的 for 循环在此之前很久就完成了。
当您使用 await 时,您将阻止以下代码,直到 promise 解决。这意味着每次调用 tokenOfOwnerByIndex
都必须在 for 循环继续之前解决。
查看我的代码以获取示例。
function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
console.time('promise');
let c = 10;
for (let i = 0; i < 10; i++) {
sleep(100)
.then(() => {
c--;
if (c === 0) {
console.timeEnd('promise');
}
});
}
console.time('await');
(async () => {
let c = 10;
for (let i = 0; i < 10; i++) {
await sleep(100);
c--;
if (c === 0) {
console.timeEnd('await');
}
}
})();
关于javascript - 异步/等待比回调慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56894620/