使用then / catch承诺结果

时间:2016-09-28 13:30:32

标签: javascript promise ecmascript-6

我在反应APP中测试了ES6承诺,但我没有在我的.then上结果:

function addItem (value) {
  return new Promise((resolve, reject) => {
    document.getElementById('todo').innerHTML += `<li>${value}</li>`;
  });
}

addItem(value).then(() => {
  alert('then !');
}).catch((err) => {
  console.log(err)
})

我的功能已执行,但我当时没有发生任何事件。

你知道我哪里错了吗?谢谢 ! :)

4 个答案:

答案 0 :(得分:1)

Promise用于异步任务。使用它们执行同步代码毫无意义。在您的示例中,then()无效,因为您永远无法解决承诺。要解决此问题,您需要致电resolve()

答案 1 :(得分:0)

你需要在你的承诺中打电话拒绝或解决。

function addItem (value) {
  return new Promise((resolve, reject) => {
    document.getElementById('todo').innerHTML += `<li>${value}</li>`;
    resolve();
  });
}

答案 2 :(得分:0)

您需要解决您的承诺,例如:

function addItem (value) {
  return new Promise((resolve, reject) => {
    document.getElementById('todo').innerHTML += `<li>${value}</li>`;
    resolve(10);
  });
}

addItem(value).then((data) => {
  alert('then !');
  console.log(data);// 10
}).catch((err) => {
  console.log(err)
})

答案 3 :(得分:0)

您忘了在Promise中调用resolvereject函数。

resolve是您完成操作后调用的功能。

resolve();

您传递给resolve()的论据是您在then函数中返回的内容。

reject是您在行动中出现错误时调用的功能。如果你没有任何东西可以拒绝,那么你可以把它留下来,你不必打电话给它。

reject();

您传递给reject()的论据是您在catch函数中返回的内容。