2 回答
![?](http://img1.sycdn.imooc.com/533e4d470001a00a02000200-100-100.jpg)
TA贡献1815条经验 获得超6个赞
我肯定会使用 async/await,如下所示:
let my_break = 0
let page_id = 1
while (my_break===0) {
const data = await getReposData(name, page_id)
if (data.length===0){
my_break = 1
} else {
data.forEach(item=>{createReposLink(item,parent_el)})
}
page_id += 1
}
您可以在此处找到有关 async/await 的更多信息:https : //developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await
![?](http://img1.sycdn.imooc.com/54584d560001571a02200220-100-100.jpg)
TA贡献1802条经验 获得超10个赞
Promise 本质上是异步的,这意味着执行 then 回调的最早点将是下一个事件 tick。您的 while 循环正在当前事件滴答上执行,并且在完成之前不会放弃执行控制。它只会在 promise 解决时完成,这只能在下一个事件滴答时发生,在循环完成之前不会发生;这是从来没有。
javascript 中没有 thread.sleep;如果要在异步操作运行时暂停执行,则需要将其余代码排队以在 Promise 解析后运行。
如果您查看承诺规范,则从 then 回调返回承诺将延长原始承诺的等待时间。
let p = getReposData(name, page_id).then(data => {
if (data.length === 0){
return;
}
return Promise.all(data.map(item=> createReposLink(item, parent_el)))
})
添加回答
举报