为什么将承诺写成“ then(..)。catch(..)”?

时间:2018-11-04 21:53:34

标签: javascript es6-promise

我是JavaScript新手。当我们使用.then和.catch时,我可以知道为什么我们用

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

为什么这样写:

getIDs
.then(IDs => {
 console.log(IDs);
})
.catch(error => {
 console.log('Error!!');
});

代替类似的东西

getIDs.then(IDs => {
  console.log(IDs);
 });
// note: access getIDs again!
getIDs.catch(error => {
  console.log('Error!!');
});

其背后的逻辑是什么?非常感谢!

2 个答案:

答案 0 :(得分:2)

then子句创建了一个新的Promise,因此在此后续Promise上调用catch可以捕获不同的异常。

在第二个片段中,您仅从最初的getIDs承诺中捕获了异常。

答案 1 :(得分:2)

使用此:

update_genreRankings (state, object) {
  Vue.set(state, 'genreRankings', object)
}

在使用以下命令时,您还会捕获以前的getIDs .then(IDs => { console.log(IDs); }) .catch(error => { console.log('Error!!'); }); 函数的错误:

then

您只会从getIDs.then(IDs => { console.log(IDs); }); // note: access getIDs again! getIDs.catch(error => { console.log('Error!!'); }); 中捕获错误。