利用 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
針對你這種情況,剛好我寫了個包,https://github.com/zaaack/mon... 應該能滿足你的需求
Promise.all 是當所有給定的可迭代完成時執行 resolve,或任何 promises 失敗時執行 reject。
如果傳遞任何的 promises rejects ,所有的 Promise 的值立即失敗,丟棄所有的其他 promises,如果它們未 resolved。如果傳遞任意的空數組,那麼這個方法就會立刻完成。
1) promise all中的每個promise都會被執行
2)此時p的狀態就變成rejected
針對你這種情況,剛好我寫了個包,https://github.com/zaaack/mon... 應該能滿足你的需求