[英]Return an error from a nested Promise
假設我有這段代碼:
let queries = [Student.findById(idStudent), Actv.findById(idActv)];
Promise.all(queries)
.then(result => {
let student = result[0];
let actv = result[1];
if(student == null)
return Promise.reject('Student not found');
if(actv == null)
return Promise.reject('Actv not found');
if(student.actvs.indexOf(actv._id) != -1 || actv.studentsInscritos.indexOf(student._id))
return Promise.reject('Student already signed up');
Actv.find({field: '1234'})
.then(qr => {
if(qr == null)
return Promise.reject('No actv found');
//Do something else
})
.catch(err2 => {
//Error
})
})
.catch(err => console.log({"error" : err}));
當我執行第二個查詢時,它將不返回任何結果,並且將拋出Promise拒絕。 我怎樣才能使諾言抓住這個例外?
很簡單 您必須退還它,而不是陷入內在的諾言中。
那應該工作:
let queries = [Student.findById(idStudent), Actv.findById(idActv)];
Promise.all(queries)
.then(result => {
let student = result[0];
let actv = result[1];
if(student == null)
return Promise.reject('Student not found');
if(actv == null)
return Promise.reject('Actv not found');
if(student.actvs.indexOf(actv._id) != -1 || actv.studentsInscritos.indexOf(student._id))
return Promise.reject('Student already signed up');
return Actv.find({field: '1234'})
.then(qr => {
if(qr == null)
return Promise.reject('No actv found');
//Do something else
})
})
.catch(err => console.log({"error" : err}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.