我需要循环,但我需要前一个承诺的值(nextPageToken)
我不想重复代码
我的代码是:
function load () {
search_this_q = "cats";
search (search_this_q)
// loop here
.then (function (result) {
console.log ("thenb");
return next_Page_Search (result.nextPageToken, search_this_q);
})
.then (function (result) {
console.log ("thenc");
return next_Page_Search (result.nextPageToken, search_this_q);
})
.then (function (result) {
console.log ("thend");
return next_Page_Search (result.nextPageToken, search_this_q);
})
// loop here
.then (function (result) {
console.log (result)
})
}
答案 0 :(得分:1)
如果我理解正确,你可以使用递归。类似的东西:
function search(q) {
console.log(q)
return new Promise(function (resolve) {
setTimeout(function () {
resolve({ nextPageToken: q + 1 })
}, 100)
})
}
function load() {
function loop(query, callsTodo) {
return search(query).then(function (result) {
return callsTodo === 0 ?
result :
loop(result.nextPageToken, callsTodo - 1)
})
}
return loop("cats", 3)
}
load().then(function (res) {
return console.log(res)
})

可以在外部范围内将变量转换为带有变量的正常循环,但是这样更容易推理范围/状态。