Javascript承诺回忆直到可接受的回报

时间:2017-05-31 12:52:26

标签: javascript promise es6-promise

ES6

我想继续调用此方法,直到它返回0作为结果。有时返回一个值需要5秒钟,有时需要10秒钟。有时它不返回值,但我想继续前进,直到它返回0.它应该等到答案回来或在10秒后超时才能调用它。

这是我尝试这个的方式,但由于某种原因它无法正常工作。

 function method() {
        doSomething(from_api).then(function (status) {
            if(status != "0") {
                method();
            } else {
                console.log("success");
            }
        }), function (error) {
            method();
        });
}

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

我猜你想要一个类似异步循环的东西。

function asynchronous_while(promise_provider, condition) {
    return promise_provider().then(function (result) {
        if (condition(result) === true) {
            return asynchronous_while(promise_provider, condition);
        } else {
            return result;
        }
    });
}

asynchronous_while(function () {  // promise provider
    return getStatus(from_api);
}, function (result) {            // condition
    return result != "0";
}).then(function (result) {
    console.log("success", result);
    // result should now be "0";
});

完成所需的时间完全取决于getStatus(from_api)何时返回0。那可能从不。适用于的传统的相同陷阱。

答案 1 :(得分:0)

您的代码有效。你刚才有一个额外的右括号。 变化:

}), function (error) {

为:

}, function (error) {