-1
我需要爲以下場景使用藍鳥承諾(已經在使用順序方法的本機承諾中實現過),但是混淆瞭如何在藍鳥中實現。如何使用特定場景的藍鳥承諾
data :
[
{
field1 : value1,
field2 : [
subfield1 : subvalue1,
subfield2 : subvalue2
]
field3 : value3,
},
{
field1 : value1,
field2 : [
subfield1 : subvalue1,
subfield2 : subvalue2
]
field3 : value3,
}
]
- 所以我首先我需要基於並行循環爲每個塊
- 在每個塊中我需要執行四個並行獨立的功能的承諾(它們有自己的邏輯像HTTP /分貝)
- 然後我需要第五功能,其需要的數據來自上述四個功能
- 然後我需要保存功能
- 然後相同的邏輯重複對下一個塊的一個
- 最終解決承諾
目前我試過類似以下
var bbPromise = require("bluebird");
db.connect(dsn).then(prepareData).then((results) => {
}).catch((err) => {
console.log(err)
});
function prepareData(dbObject) {
let recordsToInsert = [];
let promises = [];
request.forEach(function(row, idx) {
let procesedRow = {
// data build from row
};
promises.push(childFunction(procesedRow));
});
bbPromise.all(promises).then((results) => {
// resolve here ?
})
}
function childFunction(data) {
bbPromise.join(
firstFunction(data),
secondFunction(data),
thirdFunction(data),
fourthFunction(data)
)
.then((results) => {
data.firstResults = results[0];
data.secondResults = results[1];
data.thirdResults = results[2];
data.fourthResults = results[3];
return data;
}).then(fifthFunction)
.then((results) => {
data.fifthResults = results;
return insertData(data);
})
.then((results) => {
bbPromise.resolve(results);
});
}
它的工作,但最終成功的調用(見這裏解決?)之前的任何實際操作的執行。
嗯,它的工作。他們是否有任何特定的情況下我們必須使用決心而不是退貨? –
在「新承諾」內 - 即幾乎從不 – Bergi