如何在promise中更改外部变量的值?

时间:2017-03-06 19:57:33

标签: javascript express promise

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');
}

我认为外部变量没有变化,因为承诺是异步完成的。 但我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

  

我认为外部变量并没有改变,因为承诺是异步完成的。

Yes

  

我不知道如何解决这个问题。

将要评估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)

值已更改。但是在记录其值时尚未更改。没有其他方法可以等待解决或拒绝承诺以获得更改的值。