为什么结果不是我在Nodejs承诺的预期?

时间:2017-01-05 12:23:06

标签: node.js promise

我在Node.js中为bluebird编写了测试代码,如下所示:

var Promise = require(‘bluebird’)
var obj = {
      func1: function () {
               return ‘foo’
      },
      func2: function () {
              return ‘bar’
      }
}
console.log("==================================")
Promise.promisifyAll(obj)

obj.func1Async().then(function (result) {
      console.log(result)
})

我期望的是打印" foo",但实际上没有任何输出。 有什么问题吗?

1 个答案:

答案 0 :(得分:3)

看了一会儿之后,似乎Bluebird promisify在节点式函数上工作,如下所示:

  • 可以先接受0..N参数
  • 最后一个参数始终是回调
  • 需要使用(错误,数据)参数按顺序调用
  • 回调。

所以在你的情况下,代码应该是:

var obj = {
  func1: function (cb) { // note if you add params they need to be before cb and always passed when invoking the func1Async version
    cb(null, 'foo'); // null => no error
  },
  func2: function (cb) {
    cb(null, 'bar'); // null => no error
  }
}

然后它有效。丑陋 - 但它应该如何。