我在循环中使用q promise时遇到问题。结果显示
0
1
2
-
-
-
但是我保证的结果必须是:
0
-
1
-
2
-
有我的代码:
private let lock = NSRecursiveLock()
并支持它
for(let i = 0; i < 3; i++) {
let row = planRespone[i];
let planData = {
diary_id:diaryData.id,
title:row.title
};
console.log(i);
addDiaryPlan(planData)
.then((insertId) => {
console.log("--");
})
.catch((err) => {
throw err;
})
};
在这种情况下,我如何使用Promise?
答案 0 :(得分:0)
正如其他人所说,我根本不需要Q。您可以使用node.js内置功能(util.promisify()
)来做到这一点。
并且当您想按顺序运行for
循环时,在等待异步操作完成之后再进行下一次循环迭代,那么async/await
是最简单的方法这样做是因为它会暂停for
循环:
const util = require('util');
Mdl.addDiaryDetailPromise = util.promisify(Mdl.addDiaryDetail);
async function someFunction() {
for (let i = 0; i < 3; i++) {
let row = planRespone[i];
let planData = {
diary_id:diaryData.id,
title:row.title
};
console.log(i);
await Mdl.addDiaryPlanPromise(planData).then(insertId => {
console.log("--");
});
};
}
// usage
someFunction().then(() => {
console.log("all done");
}).catch(err => {
console.log(err);
});
这应该为您提供所需的输出顺序。
请注意,要使用await
,它必须位于声明为async
的函数中,并且该函数将始终返回一个promise,该promise会在函数完成时解析或在某种排序时拒绝函数中未捕获的错误(实际异常或等待被拒绝)。