如何循环承诺(nextPageToken)?

时间:2018-03-16 01:10:40

标签: javascript

我需要循环,但我需要前一个承诺的值(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)
    })
}

1 个答案:

答案 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)
})




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