簡體   English   中英

從嵌套的Promise返回錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM