为什么即使在函数中已经有return的情况下,为什么也要在promise链中使用return?

时间:2018-11-04 23:30:55

标签: javascript es6-promise

我是JavaScript新手。在下面的代码中,我是否知道为什么我仍然必须使用return getRecipe(IDs [2])而不是仅在.then方法中调用getRecipe(IDs [2])的原因?甚至getRecipe()已经在其中返回了新的Promise吗?我发现如果不在.then方法中使用return,将会收到未定义的错误。回报实际上是回报我们到达下一个承诺的承诺吗?但是为什么以及如何?非常感谢!

const getIDs = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve([523, 883, 432, 974]);
  }, 1500);
});

const getRecipe = recID => {
  return new Promise((resolve, reject) => {
    setTimeout(
      ID => {
        const recipe = { title: 'Fresh tomato pasta', publisher: 'Jonas' };
        resolve(`${ID} : ${recipe.title}`);
      },
      1500,
      recID
    );
  });
};

getIDs
  .then(IDs => {
    console.log(IDs);
    return getRecipe(IDs[2]);
  })
  .then(recipe => {
    console.log(recipe);
  })
  .catch(error => {
    console.log('Error!!');
  });

1 个答案:

答案 0 :(得分:1)

在一连串的.then语句中,当您从.then返回内容时,它将转到下一个.then(如果有)。在这种情况下,我们使用.then语句执行多个任务,并且第一个任务是根据某个ID获取配方。收到此配方后(由于getRecipe函数的结果),我们将其返回到下一个.then,后者的任务是console.log'ing配方。如果不返回getRecipe(ID [2])结果,则下一个.then语句将没有'recipe'参数