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