javascript - 如何更改 promise 内外部变量的值?

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

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

最佳答案

I think that external variable didn't change because promise is done asynchronously.

Yes .

I don't know how to solve this problem.

将想要计算 isError 变量的代码放入 Promise 回调中。事实上,最好将其分成两部分then callbacks - 一个用于完成,一个用于拒绝情况,这样您就根本不需要该 bool 变量。

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

关于javascript - 如何更改 promise 内外部变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42634445/

相关文章:

javascript - 使用 .catch() 处理未处理的 Promise 拒绝

javascript - 在我自己的 Angular 服务中,如何将返回值返回给调用该服务的 Controller ?

javascript - AngularJS 中同一个表是否可以同时具有 orderBy 和过滤器?

css - 当我将两个参数传递给 app.get 时,为什么我的 CSS 不起作用?

javascript - 难以将快速 session 变量实现为数组

javascript - 如何使用 Jasmine 测试 AngularJS Controller 返回的 Promise 值?

javascript - 删除表中单行的类别

javascript - 如何在 JS 中使用 Regexp 制作\一个文字反斜杠

javascript - 如何在请求体中传递变量?

javascript - 如何在 sqlite3 db.get 和 db.all 中使用 async/await?