无法在异步函数上调用 nodeify,但可以调用 then()



我有这两个函数。

async function testAsync(){
    console.log('async func')
}
function callback(){
    console.log('callback function.')
}

当我在async上调用then时,它可以使用,类似于promise。例如,以下代码有效。

bluebird.resolve().then(()=> console.log('then promise'))
testAsync().then(()=> console.log('then async'))

但是当我在async上调用nodeify时,它会出现错误。虽然,它适用于promise

工作 -> bluebird.resolve().nodeify(callback)

错误 -> testAsync().nodeify(callback)

这是我遇到的错误。为什么呢?

TypeError: testAsync(...).nodeify is not a function

错误指出本机诺言对象上没有nodeify功能。

如果您需要使用此功能,而您确实不应该使用此功能,则必须从定义的承诺实现中获取它,并将其称为诸如p.prototype.nodeify.call(testAsync())之类的对象,然后希望它不使用任何内部零件承诺实施。

或更好地从承诺实施中提取功能,因为它只是这样的东西:

function nodeify(cb) {
  this.then(function (v) { cb(null, v) });
  this.catch(function (err) { cb(err) });
}

可以用作nodeify.call(testAsync(), callback)

相关内容

最新更新