编程语言
首页 > 编程语言> > javascript – 对async / await的环回支持

javascript – 对async / await的环回支持

作者:互联网

我正在使用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:错误:已经调用了回调.
> UnhandledPromiseRejectionWarning:未处理的承诺拒绝.这个错误源于在没有catch块的情况下抛出异步函数,或者拒绝未使用.catch()处理的promise.

怎么了?我无法解决这个问题.

解决方法:

一些重构:

MyModel.myFunction = async () => {
  try {
    const data = await MyModel.find({where: {id: 2}});
    return data; // it's enough as the async means it returns a promise
  } catch (e) {
    console.error(e);
    throw e;
  }
};

如果您不需要记录错误(环回错误处理程序将其记录而不是您),以防万一:

MyModel.myFunction = async () => {
  return MyModel.find({where: {id: 2}});
};

标签:loopbackjs,javascript,ecmascript-6,node-js,async-await
来源: https://codeday.me/bug/20190727/1549879.html