[英]How to break while inside promise.then?
在檢查 Promise.then 中的數據后,我想退出循環。 我該怎么做? 現在我有無限循環。這是代碼:
let my_break = 0
let page_id = 1
let p = Promise.resolve()
while(my_break===0) {
p = p.then(() => {
getReposData(name,page_id).then(data=>{
if (data.length===0){
my_break = 1
}
else {
data.forEach(item=>{createReposLink(item,parent_el)})
}
})
page_id += 1
});
}
Promise 本質上是異步的,這意味着您的 then 回調將被執行的最早點將是下一個事件 tick 。 您的 while 循環在當前事件滴答聲上執行,並且在完成之前不會放棄執行控制。 它只會在 promise 解決時完成,這只能在下一個事件滴答時發生,直到你的循環完成才會發生; 從來沒有。
javascript中沒有thread.sleep; 如果要在異步操作運行時暫停執行,則需要將代碼的 rest 排隊,以便在 promise 分辨率之后運行。
如果您查看 promise 規范,從 then 回調返回 promise 將延長原始 promise 的等待。
let p = getReposData(name, page_id).then(data => {
if (data.length === 0){
return;
}
return Promise.all(data.map(item=> createReposLink(item, parent_el)))
})
我肯定會達到異步/等待,如下所示:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.