在feathersJS中等待两个promise


// users.hooks.js
const userDeletion = require('../userdeletion/userDeletion');
const triggerUserDeletion = () => {
  return async (context) => {
    const userDeletionRes = userDeletion(context);
    const userDeletionResRes = userDeletionRes(context);
    await Promise.all(
      [userDeletionResRes]
    );
  };
};
// userDeletion.js
module.exports = () => {
  return async (context) => {
    const userDeletionResult = await context.app.service('replicate').remove(
      {
        // ...
      }
    );
    const userDeletionResultData = userDeletionResult.data[0];
    console.log(userDeletionResultData);
  };
};

上面是我的钩子。我如何等待两个promise,即调用两个服务(不仅仅是复制服务)

您应该创建两个promise对象,然后使用await Promise.all(promise1, promise2)await Promise.allSettled(promise1, promise2)暂停,直到它们都收到数据。

通过不对每个promise单独调用await,您允许两个请求并行运行,加速依赖于它们的函数。请求越多,这一点就越明显,但即使只有两个请求,它也可以将等待时间减半。

await Promise.all()将等待所有承诺解决,或者将抛出一个错误,只要任何承诺拒绝。如果你需要两个请求都成功才能继续执行程序,这是很有用的——这样你就可以立即开始错误处理。

await Promise.allSettled()将等待所有承诺解决或拒绝。然后,您可以映射返回的对象列表并检查status字段,以确定它们是否被解析或拒绝。这在您想要更细粒度的错误处理,或者可以从失败的请求中恢复并继续执行函数的情况下非常有用。

最新更新