【问题标题】:How to promisify a braintree method?如何promisify一个braintree方法?
【发布时间】:2016-03-23 03:30:44
【问题描述】:

我在承诺一种 Braintree 方法时遇到了麻烦。具体来说,gateway.transaction.sale。 https://developers.braintreepayments.com/reference/request/transaction/sale/node

我正在使用带有 bluebird 库的 node.js 来实现承诺。

    ...
    var sale = bluebird.promisify(gateway.transaction.sale);
    return sale({
        amount: '10.00',
        paymentMethodNonce: nonce,
    });
})
.then( // doesn't reach here)
.catch(// logs out error)

具体来说,promise 链底部的 .catch 块注销:

[TypeError: this.create is not a function]

当不尝试承诺时,代码可以正常工作。

gateway.transaction.sale({
    amount: '10.00',
    paymentMethodNonce: nonce,
}, function(err, result) {
    ... no errors, everything works fine
}

这是 Braintree 库的实现方式有问题吗?我承诺错了吗?我可以尝试任何其他的承诺策略来避免回调地狱吗?

【问题讨论】:

    标签: node.js promise bluebird braintree


    【解决方案1】:

    您可以像这样承诺大多数大脑树方法:

    var G = {};
    for(var k1 in gateway){
        if(gateway.hasOwnProperty(k1) && typeof gateway[k1] === 'object'){
            G[k1] = G[k1] || {};
            for(var k2 in gateway[k1]){
                if(typeof gateway[k1][k2] === 'function'){
                    console.log('Promisify:', k1, k2);
                    G[k1][k2] = G[k1][k2] || {};
                    G[k1][k2] = bluebird.promisify(gateway[k1][k2], {context: gateway[k1]});
    
                }
            }
        }
    
    }
    

    那么你可以这样使用它们:

    G.paymentMethod.find('payment_method_token').then(cb_suc).catch(cb_fail);
    

    【讨论】:

      【解决方案2】:

      您缺少上下文参数,即this。如果您使用的是 bluebird v2,请执行以下操作:

      var sale = bluebird.promisify(gateway.transaction.sale, gateway.transaction);
      

      如果您使用版本 3,请执行以下操作:

      var sale = bluebird.promisify(gateway.transaction.sale, {context: gateway.transaction});
      

      你可以在Bluebird's docs看到这个。

      【讨论】:

      • 在那里添加自定义回调函数处理程序怎么样?
      猜你喜欢
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 2019-10-15
      • 2020-09-19
      • 2020-08-15
      • 1970-01-01
      相关资源
      最近更新 更多