在这种情况下如何使用blubird承诺?

时间:2015-07-22 00:00:51

标签: javascript node.js express promise

我有这个代码,我试图让它工作,但到目前为止承诺似乎很混乱。我做了一些研究,并且blubird承诺似乎更灵活。你们有没有经验,也许会告诉你如何处理这段代码。

以下是代码:

                var invoicesList;
                var getInvoices = stripe.getInvoiceList('cus_id', function(err, callback){
                    if (err) {
                        invoicesList = "An error happened";
                    }else{

                        invoicesList = callback.data;
                    };
                });
   console.log(invoicesList); //Undefined result

提前致谢

1 个答案:

答案 0 :(得分:2)

您的部分问题是您不了解异步响应的含义。这意味着数据将来可用,并且您可以可靠地访问该数据的唯一位置是在提供结果的回调函数内。在调用回调之前,您的最后console.log(invoicesList)语句实际上正在执行。异步回调在将来被称为某些不确定的时间。您必须在回调中使用他们的数据。

这是一个例子,它是一个异步方法,然后使用这个新方法来获得使用promises的结果:

var Promise = require('bluebird');
var getInvoiceList = Promise.promisify(stripe.getInvoiceList);

getInvoiceList('cus_id').then(function(data) {
    // you can use the result data here
    console.log(data);
}, function(err) {
    // process an error here
});
// you cannot use the result here because this executes before the 
// async result is actually available