【问题标题】:Return value from callback回调的返回值
【发布时间】:2022-01-11 06:23:07
【问题描述】:

我在回调函数中有值,无法成功返回。

async pos(convertedCodeDBSearch) {
    var dd;
    const x =  await idealPostcodes.lookupAddress(convertedCodeDBSearch, function (error, searchResults)  {
      return searchResults.result.hits[1];
    });
    console.log('x', x);
  }

我需要从函数返回searchResults.result.hits[1];。 这是代码, 谢谢。

【问题讨论】:

  • 是控制台日志没有打印你所期望的,还是 pos 没有返回你所期望的?如果不查看 lookupAddresses 代码,我们很难知道发生了什么。
  • 你不能做这些事情,你需要在回调中继续编码。只需将控制台日志放入回调并更改变量名称即可。
  • return 行之前,添加console.log(searchResults) 以查看您得到了什么。此外,回调函数是错误优先函数,您应该先添加检查以查看是否发生错误。

标签: javascript node.js nestjs


【解决方案1】:

我想你正在使用this npm package 或它的一个分支。如果是这种情况,您应该修改您的逻辑,因为对lookupAddress 的调用本身不会返回值,这意味着您代码中的x 将始终为undefined

由于您已经在使用异步函数,我的建议是使用 Node 助手 util.promisify 将回调函数的结果提取到 Promise 中。可以等待这个promise获取原始回调的成功值(这里是searchResults)。

const { promisify } = require('util');

async pos(convertedCodeDBSearch) {
    var dd;
    const searchResults = await promisify(idealPostcodes.lookupAddress.bind(idealPostcodes))(convertedCodeDBSearch);
    return searchResults.result.hits[1];
}

【讨论】:

    【解决方案2】:

    不确定它是否能解决你的问题,但你为什么不完全摆脱回调并充分利用 async/await 语法呢?

    async pos(convertedCodeDBSearch) {
        var dd;
        try {
            const x =  await idealPostcodes.lookupAddress(convertedCodeDBSearch);
            const results = x.result.hits[1];
            console.log(`The results are: ${results}`);
            return results;
        } catch (e) {
            console.error("Something went wrong")
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多