解决javascript承诺

时间:2016-12-28 11:07:55

标签: javascript promise resolve

下面概述了在控制台上显示两个简单步骤的承诺,然后在第一步完成后显示其他内容。

我想了解如何解决这个承诺,并允许第二步完成。

var lookup_documents = new Promise(
    function(resolve, reject) {
        console.log("1st");
        //resolve(); - How do I do this outside of this function?
    }

);

lookup_documents.then(
    function() {
        console.log("2nd");
    }
);

2 个答案:

答案 0 :(得分:0)

通常,当你想将一些异步函数包装到一个promise中时,你会使用new Promise(),例如:

new Promise((resolve, reject) => {
    makeAjaxCall((err, data) => {
        if(err) return reject(err);
        else return resolve(data);
    })
});

还有其他Promise实现,例如q,您可以在其中创建"延迟"返回promise的对象......类似的东西是:

function makeAjaxCallPromise() {
    let deferred = Q.defer();
    makeAjaxCall((err, data) => {
        if(err) return deferred.reject(err);
        else return deferred.resolve(data);
    });
    return deferred.promise;
}

对于您想要的特定事物......我能想到的是在promise函数范围之外声明一个变量并将其设置为asign,如:

let resolver, rejecter;
new Promise((resolve, reject) => {
    resolver = resolve;
    rejecter = reject;
});
makeAjaxCall((err, data) => {
    if(err) return resolver(err);
    else return rejecter(data);
});

但这看起来并不太好并且可能导致错误......尝试将所有内容包装在Promise函数中。

答案 1 :(得分:0)

你可以这样做,使用你的例子 - 如果我理解你的话。

 Boolean yourBool = getIntent().getExtras().getBoolean("BoolName");