而在JavaScript/node.js中循环使用A + promises

Yur*_*rik 2 javascript node.js promise es6-promise

我需要继续调用远程API,直到我得到我需要的响应,并且我想在node.js中使用官方A + promises.同步psudo代码:

params = { remote api call params }
while (true) {
    result = callRemoteApi(params)
    if isGood(result) {
        onSuccess(result)
        break
    }
    params = modify(params)
}
Run Code Online (Sandbox Code Playgroud)

我正在使用request-promise lib来处理请求,结果可能是这样的:

new Promise(function (resolve, reject) {
    var task = request({params})
        .then(function (result) {
            if (isGood(result)) {
                resolve(result);
            } else {
                task = request({new params}).then(this_function);
            }
        });
Run Code Online (Sandbox Code Playgroud)

PS这与/sf/answers/1206715541/非常相似,但我想要一个非基于q的实现.

aar*_*sil 6

像这样的东西应该运作良好:

var remoteApiCall = function(num){
    // fake function to resolve promise if random number in range
    return new Promise(function(resolve, reject){
        return ((Math.random()*10) < num)
            ? resolve(true)
            : reject(false);
    })
}

function getUntil(num){
    return remoteApiCall(num).then(function(result){
        if (result) {
            return result  
        } else {
            // call again until you get valid response
            return getUntil(num)
        }
    })
}

getUntil(num).then(...)
Run Code Online (Sandbox Code Playgroud)