var isError = false;
savedata.ingredients.split(',').reduce(function(p, ing) {
return p.then(function() {
return db.dog_ingredients.create({ content_name: ing, dogFoodId: dogId });
});
}, Promise.resolve()).catch(function(e) {
console.log(e);
isError = true; ///// I want to change value at this point
});
console.log(isError); // result false.
if(isError){
res.status(400).send('Error');
}else{
res.status(200).send('Good');
}
我认为外部变量没有变化,因为承诺是异步完成的。 但我不知道如何解决这个问题。
答案 0 :(得分:3)
我认为外部变量并没有改变,因为承诺是异步完成的。
我不知道如何解决这个问题。
将要评估isError
变量的代码放在promise回调中。事实上,最好将它分成两个then
callbacks - 一个用于实现,一个用于拒绝情况,这样你就根本不需要那个布尔变量。
savedata.ingredients.split(',').reduce(function(p, ing) {
return p.then(function() {
return db.dog_ingredients.create({ content_name: ing, dogFoodId: dogId });
});
}, Promise.resolve()).then(function() {
res.status(200).send('Good');
}, function(e) {
console.log(e);
res.status(400).send('Error');
});
答案 1 :(得分:1)
值已更改。但是在记录其值时尚未更改。没有其他方法可以等待解决或拒绝承诺以获得更改的值。