我有一个接收回调作为参数的函数。例如:
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/