无法在异步函数上调用nodeify但可以调用then()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在异步函数上调用nodeify但可以调用then()相关的知识,希望对你有一定的参考价值。
我有这两个功能。
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
答案
该错误表明本机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)
以上是关于无法在异步函数上调用nodeify但可以调用then()的主要内容,如果未能解决你的问题,请参考以下文章