【发布时间】:2018-11-13 10:42:56
【问题描述】:
我正在尝试使用 Promise 编写一段代码,避免嵌套它们,但我一直在测试返回的结果以处理 Promise 流.. 这种模式可行吗??
// 一组返回值的承诺任务
function doTask1() => {
return apiPromise1()
.then((result1) => {
return result1;
})
}
function doTask2(result1, paramOne) => {
return apiPromise2(result1, paramOne)
.then((result2) => {
return result2;
})
}
function doTask3(result1) => {
return apiPromise3()
.then((result3) => {
return result3;
})
}
function doTask4(result1, paramOne) => {
return apiPromise4()
.then((result4) => {
return result4;
})
}
//主promise根据promise返回结果处理promise流程
function getCurrentProcess(paramOne) {
const promises = [];
// how to get the returned result1 to be used by other promises ?
promises.push(doTask1);
if (result1 === 'OK') {
promises.push(doTask2(result1, paramOne));
if (result2 === 'OK') {
promises.push(doTask3(result1));
if (result3 === 'OK') {
promises.push(doTask4(result1, paramOne));
}
}
}
return Promisz.all(promises)
.then(() => {
return 'well done'
});
}
//初始调用函数
exports.newJob = functions.https.onRequest((req, res) => {
const paramOne = { ... }
getCurrentProcess(paramOne).then((res) => {
return { status: 200, infos: res };
}, error => {
return {status: error.status, infos: error.message};
}).then(response => {
return res.send(response);
}).catch(console.error);
});
【问题讨论】:
-
如果他们的响应不是
'OK',你会拒绝这些承诺会更容易。这样你就不需要做任何这些条件了。 -
感谢您的反馈...在某些 cses 中我需要测试响应 .. 即当响应是列表时,我需要搜索此列表并根据搜索结果执行下一个承诺..