【发布时间】:2018-10-11 21:09:47
【问题描述】:
我正在使用 loopback 3 构建 REST 服务,并且我想使用 async/await 而不必使用回调。所以不要这样做:
MyModel.myFunction = (callback) => {
MyModel.find({where: {id: 2}}, (e, data) => {
if (e) return callback(e);
callback(null, data);
});
};
我更愿意这样做:
MyModel.myFunction = async (callback) => {
try {
const data = await MyModel.find({where: {id: 2}});
callback(null, data);
} catch (e) {
console.error(e);
callback(e);
}
};
回调方法完美运行 - 但 async/await 会产生许多错误:
UnhandledPromiseRejectionWarning: Error: Callback was already called.UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
怎么了?我无法解决这个问题。
【问题讨论】:
-
您真的要忽略错误(如您的原始代码中的错误)吗?
-
不要将 promise 与回调样式混合。如您所见,结果并不好 - 您没有正确处理
callback抛出的情况。 -
那是你的实际代码吗?我将其复制粘贴(并添加了一个花括号)到
server.js中,刚刚试了一下,它没有抛出任何错误。 -
当然,我想在第一种情况下处理错误。这是实际代码,它会为我抛出错误,它位于
mymodel.js文件中(作为附加的远程端点)。 -
如果您使用异步函数,则不需要使用回调,只需返回结果,只需从函数参数中删除回调,而不是调用回调,只需返回结果。
标签: javascript node.js ecmascript-6 async-await loopbackjs