【问题标题】:Using Node JS utility.promisify() call is not coming back from async callback method使用 Node JS utility.promisify() 调用不会从异步回调方法返回
【发布时间】:2019-12-20 23:59:28
【问题描述】:

我正在尝试使用 node js promisify 将回调转换为 promise inoreder 以在异步回调函数上使用 await。

我尝试了不同的方法来传递参数并放置记录器

const {promisify} = require('util');
const callbackFn = (firstName, callback) => {
  setTimeout(() => {
    console.log("1");
    if (!firstName)  callback(new Error('no first name passed in!'),null)

    const fullName = `${firstName} IBM`

    callback(null,fullName)
  }, 2000)
}

async function useAwaitEx(){
  try {
    var calbbackfnpromisfied = promisify(callbackFn);
    console.log("3");
    var result = await calbbackfnpromisfied('mayank',  console.log);
    console.log("2");

   console.log("result"+result)
  }catch (error) {
    console.log("error"+error);
  }
}
useAwaitEx();

我期望输出为 3 1 null 'mayank IBM' 2 null 'mayank IBM'

我得到的输出为 3 1 null 'mayank IBM'

【问题讨论】:

  • 没有名为 result2 的变量。另外,你说的是你想要什么输出,而不是你得到什么。
  • @ThisIsNoZaku 使用实际结果完成了编辑并删除了 result2 记录器

标签: javascript node.js node-promisify


【解决方案1】:

我认为一个很小的改动应该可以解决这个问题。

如果我们想将console.log作为参数传递,我们需要在callbackFn函数中单独声明它。

这里的关键点是,当我们调用它时,我们不应该将最后一个回调传递给一个promisified 函数,它会为我们处理。

我们不会准确地按您的意愿记录,因为结果不会为空。

我们将记录:

3
1
null 'mayank IBM' 
2
result: mayank IBM

更新代码:

const {promisify} = require('util');
const callbackFn = (firstName, logCallback, callback) => {

setTimeout(() => {
    console.log("1");
    if (!firstName)  callback(new Error('no first name passed in!'),null)

    const fullName = `${firstName} IBM`

    logCallback(null,fullName)
    callback(null,fullName)

}, 2000)
}

async function useAwaitEx(){
try {
    var calbbackfnpromisfied = promisify(callbackFn);
    console.log("3");
    var result = await calbbackfnpromisfied('mayank', console.log);
    console.log("2");
    console.log("result:", result)

// console.log("result"+result)
}catch (error) {
    console.log("error"+error);
}
}
useAwaitEx();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2013-06-13
    • 2020-06-01
    相关资源
    最近更新 更多