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

问题描述 投票:0回答:1

我有这两个功能。

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

function callback(){
    console.log('callback function.')
}

当我在then上调用async时,它的工作原理与promise类似。例如,以下代码有效。

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

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

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

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

这是我得到的错误。为什么这样?

TypeError: testAsync(...).nodeify is not a function
node.js promise async-await
1个回答
0
投票

该错误表明本机promise对象上没有nodeify函数。

如果你需要使用这个你真的不应该使用的函数,你必须从定义它的promise实现中获取它,并在像p.prototype.nodeify.call(testAsync())这样的对象上调用它,然后希望它不使用promise的任何内部部分实现。

或者更好地从promise实现中提取函数,因为它只是这样的:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.