首頁  >  問答  >  主體

javascript - promise.all mongoose操作資料庫

利用 Promise.all([p1, p2]) 去操作兩個promise函數,這兩個函數內部都是用 mongoose 來操作資料庫。

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

我的問題是,p2 實際上已經進行了對資料庫的操作,是這樣嗎,還是 promise.all 確保了 p1、p2 都 resolve 才會進行實際的資料庫操作?

感覺是 mongoose 事務性的問題。

曾经蜡笔没有小新曾经蜡笔没有小新2704 天前873

全部回覆(2)我來回復

  • 为情所困

    为情所困2017-06-15 09:24:14

    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

    回覆
    0
  • 習慣沉默

    習慣沉默2017-06-15 09:24:14

    針對你這種情況,剛好我寫了個包,https://github.com/zaaack/mon... 應該能滿足你的需求

    回覆
    0
  • 取消回覆