javascript - 使用 await 时如何得到错误和结果

标签 javascript node.js promise async-await

我有一个接收回调作为参数的函数。例如:

client.sendMessage(params, (status, response) => {
  console.log('Status: ', status);
  console.log('API Response:\n', response);
});

然后我 promise :

const Promise                 = require('bluebird');
const sendMessageFunc: Object = Promise.promisify(client.sendMessage);

然后我称它为:

result = await sendMessageFunc(params);

我实际上想要获取 (status, response) 然后做:

(status, response) = await sendMessageFunc(params);
console.log('Status: ', status);
console.log('API Response:\n', response);

但这不是有效的语法。我应该怎么办?返回给我的“结果”对象是什么?

最佳答案

await 的全部意义在于将异步代码扁平化为同步代码,在出现错误时会抛出错误(例如 JSON.parse)
当等待一个异步函数时——如果异步函数返回了一个结果——它就像函数是同步的一样返回,
如果异步函数抛出异常 - await 重新抛出它,就像函数是同步的一样。

所以,首先,没有“地位”,只有异常(exception)。你应该用 try/catch 包围你的 await 表达式:

try{
    let response = await sendMessageFunc(params);
    console.log('API Response:\n', response);
}
catch(e){
    console.error('an error was thrown: ' + e.toString());
}

promise 只是实现协程的便捷工具(这是 async/await 关键字实际创建的)。使用 await 时不要考虑 promises,它只是一个实现细节。

关于javascript - 使用 await 时如何得到错误和结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40827830/

相关文章:

javascript - 没有变换或旋转的翻转效果

javascript - 使用 JavaScript 检测链接 href 的文件大小

javascript - 使用 POST 方法时 Node.js req.body 为空

node.js - 如何存储 hh(小时) :mm(minutes) time in mongodb

Javascript Promise 与 Mysql 链接

javascript - 将 bluebird Promise 添加到 NodeJS 模块,然后函数未定义

javascript - 任何类型的 Javascript 按钮都可以单击和取消单击,并保持这种状态,除非再次单击?

javascript - Karma 测试错误 "unable to init ocLazyLoad"

asp.net - 我需要node.js来监听socket.io请求吗?

javascript - Angular Typeahead 在 API 调用返回之前返回 - 导致 'Length of Undefined' 错误