javascript - promise.all mongoose操作資料庫
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-15 09:22:14
0
2
807

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

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

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

感覺是 mongoose 事務性的問題。

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回覆(2)
为情所困

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

習慣沉默

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!