如何在Node.js中使用Promise函数的返回值

约翰

我想编写一个从node.js中的Google Places API返回数据的函数。该函数的定义如下所示:

function getAddress(placeName) {
  return new Promise((resolve, reject) => {
    return axios.get('https://maps.googleapis.com/maps/api/geocode/json?address=' + placeName + '&key=MyAPIKey').then(response => {
      const placeID = response.data.results[0].place_id
       return axios.get('https://maps.googleapis.com/maps/api/place/details/json?placeid=' + placeID + '&key=MyAPIKey').then(response => {
          resolve(response.data.result)
          return response.data.result // here i would like to return the data.result
        }).catch(err => {
          console.error(err);
        });
    }).catch(err => {
      reject(err);
    });
  });
}

我想使用该函数并获取返回值。我已尝试使用下面的代码,但收到错误“承诺待处理”

const address = getAddress('someName').then(address => {
    phone: address.formatted_phone_number
  }).catch(err => {
    console.error(err)
  })

那么,我该如何构造函数,使其返回数据?

克鲁基德

Promise是一个异步概念,return函数中的语句是同步的。在您的示例中,new Promise(...)分支脱离了同步执行流程,因此无法以同步方式访问在promise中产生的任何结果。

您的函数返回一个Promise,并且在其中处理异步结果的唯一方法是使用其thencatch方法。

长话短说,使用异步API时,有一种特定的编码方法,它支持事件驱动的方法。考虑以下架构:

var eventBus = new EventEmitter()

eventBus.on('address', (addr) => {
  // do something with address
})

asyncGetAddress().then(addr => {
  eventBus.emit('address', addr)
})

另请参阅:https : //nodejs.org/api/events.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在C ++中使用Future和Promise从函数线程中获取返回值

如何在函数中使用存储过程返回值?

无法从 Promise 函数 Node.js 返回值

如何在Angular JS中使用$ q返回值?

如何在对象文字中使用另一个JS函数的返回值

如何在完全不同的函数中使用函数的返回值

如何使用Angular.js显示函数的返回值

Node JS从函数返回值

如何在vscode中使用jsdoc在包装函数中正确获取返回值的推断类型?

如何在python中使用户可以输入的函数的返回值

如何在bash脚本中的while测试中使用函数返回值

如何在 app.locals 函数中使用带有 express 的节点返回值

如何在模拟的Jest函数中使用var作为返回值?

如何在python中使用函数(带返回值)更新列表

如何在Javascript的另一个函数中使用返回值?

如何在打字稿中使用通用返回值注释函数

如何在C ++中使用函数的参数作为指针从DLL返回值?

如何在Node.js中从外部引用函数的返回值

如何从 node.js 中的异步函数返回值

如何使用回调从node.js函数返回值?

如何在完成处理程序中使用返回值?

如何在 gmock 中使用参数作为返回值

如何在 Flutter 中使用枚举作为返回值?

如何在node.js中使函数与promise同步

使用Promise处理Node.js中的MySQL返回值

如何在另一个函数中使用带有参数的函数的返回值

从异步函数向外部函数Node js返回值

如何在gdb中使用各种输入迭代函数,直到获得成功的返回值

如何在 f 字符串中使用 lambda 函数并有条件地返回值?