javascript - promise.all mongoose操作数据库

查看:79
本文介绍了javascript - promise.all mongoose操作数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

利用 Promise.all([p1, p2]) 去操作两个promise函数,这两个函数内部都是用 mongoose 来操作数据库。

如果 p1 被 reject 了,而 p2 是 resolve。

我的问题是,p2 实际上已经进行了对数据库的操作,是这样吗,还是 promise.all 确保了 p1、p2 都 resolve 才会进行实际的数据库操作?

感觉是 mongoose 事务性的问题。

解决方案

Promise.all 是当所有给定的可迭代完成时执行 resolve,或者任何 promises 失败时执行 reject。
如果传递任何的 promises rejects ,所有的 Promise 的值立即失败,丢弃所有的其他 promises,如果它们未 resolved。如果传递任意的空数组,那么这个方法将立刻完成。

var p0 = new Promise((resolve, reject) => {
      setTimeout(() => {
          console.log(1)
      }, 100);
}); 
var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(reject, 100, "foo");
}); 
var p4 = new Promise((resolve, reject) => {
      setTimeout(() => {
          console.log(2)
      }, 100);
});
var p = Promise.all([p0, p1, p2, p3, p4]).then(values => { 
  console.log(values);
}, values => {
    console.log(values) // foo
}); // 1 2

1) promise all中的每个promise都会被执行

2)此时p的状态就变成rejected

这篇关于javascript - promise.all mongoose操作数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆