Не может вызвать nodeify для асинхронной функции, но может вызвать then () - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть эти 2 функции.

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

1 Ответ

0 голосов
/ 18 декабря 2018

В сообщении об ошибке указывается, что на объекте обещания нет функции 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)

...