【问题标题】:Bluebird promisifyAll and Node's "oauth" library, callback function expectedBluebird promisifyAll 和 Node 的“oauth”库,回调函数预期
【发布时间】:2017-09-23 00:04:41
【问题描述】:

尝试使用 Bluebird promisifyAll 来包装 oauth 的方法,如下所示:

const Promise = require('bluebird')
const OAuth = Promise.promisifyAll(require('oauth'), {
  multiArgs: true
}).OAuth

并像这样使用:

const result = await this.oauth.getOAuthAccessTokenAsync(
        // token,
        // tokenSecret,
        // verifier
)

(注释掉参数以强制出错)

但是,我的应用程序没有掉入周围的 try/catch 的 catch 块,而是崩溃(来自 oauth 库):

if( error ) callback(error);
                     ^

TypeError: callback is not a function

我还需要做些什么来正确处理错误吗?

【问题讨论】:

    标签: node.js oauth promise bluebird


    【解决方案1】:

    您需要promisify 不是oauth 模块,而是使用new OAuth.OAuth() 创建的对象:

    const Promise = require('bluebird')
    const OAuth = require('oauth').OAuth;
    
    var oauth = new OAuth();
    
    Promise.promisifyAll(oauth, { multiArgs: true });
    

    更新:

    或者你可以promisify OAuth.prototype,正如 Ben Fortune 建议的那样:

    Promise.promisifyAll(OAuth.prototype, { multiArgs: true });
    

    Working example

    【讨论】:

    • 奇怪,尝试上述两种方法都会产生相同的错误:/
    • 奇怪,对我来说效果很好。您使用什么版本的 oAuth 和 Bluebird?
    • "bluebird": "^3.5.0", "oauth": "^0.9.15" - 我已经恢复到手动将每个调用包装在 Promise 中:(
    • 我不知道为什么这段代码对你不起作用,请尝试完整的demo
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多