我有一个简化的承诺链看起来像这样:
readDB(file)
.then(parseQuery)
.catch((err) => console.error(err))
.then(selectRandom)
.catch((err) => console.error(err))
.then(requestTrailer)
.catch((err) => {
if(err == 'Got error: No results found') {
throw new Error(err);
}
})
.then(renderMovie)
.catch((err) => console.error(err));
基本上我正在从文件中读取电影列表并传递它们,以便我可以找到电影的预告片。我不想做的是出现错误,从selectRandom
开始重复承诺链,而不必readDB
和parseQuery
现在我有一个工作代码,但它定义了两次链:
//I wrap the second round of promises in a function
selectMovie(){
selectRandom(movies)
.then(requestTrailer)
.catch((err) => {
if(err == 'Got error: No results found') {
selectMovie(); //Start the function again
throw new Error(err);
}
})
.then(renderMovie)
.catch((err) => console.error(err));
}
//Now start the promise chain
readDB(file)
.then(parseQuery)
.catch((err) => console.error(err))
.then(selectRandom)
.catch((err) => console.error(err))
.then(requestTrailer)
.catch((err) => {
if(err == 'Got error: No results found') {
selectMovie(); //Start second round
throw new Error(err);
}
})
.then(renderMovie)
.catch((err) => console.error(err));
有更简单的方法吗?
答案 0 :(得分:1)
通过调用selectMovie()函数替换.then(selectRandom)及其后的所有内容。