2017-03-09 88 views
2

我正在嘗試調用API來獲取一些數據。當電話返回有效的數據,它的工作原理!然而,當它擊中一個API錯誤或錯誤,我想創建基於關閉對數據的反應,我得到這個錯誤:Bluebird.js未處理的拒絕錯誤使用請求

Unhandled rejection Error: Data not found! 
at Request.request.post [as _callback] 
. 
. 

這是我使用的文件:

let grabSomeData = new BluebirdPromise((resolve, reject) => { 

    pullers.grabData(dataID, (err, res) => { 

    if (err) { 
     return reject(err); 
    } 

    return resolve(res); 
    }); 


}); 

grabSomeData.then((fulfilled, rejected) => { 
    console.log('res: ' + fulfilled); 
    console.log('rej: ' + rejected); 
}); 

在我的其他文件製作的HTTP請求,

grabData(dataID, grabDataCallback) { 

    let bodyObj = { 
    query: dataByIDQuery, 
    variables: { 
     id: dataID 
    } 
    }; 

    // grab the data 
    request.post(
    { 
     url: dataURL, 
     body: JSON.stringify(bodyObj) 
    }, (err, httpResponse, body) => { 

     if (err) { 
      return grabDataCallback(err); 
     } 

     let res = JSON.parse(body); 

     if (res.data.dataByID !== null) { 
      return grabDataCallback(null, res.data.dataByID); 
     } 

     return grabDataCallback(Boom.notFound('Data not found!')); 
     } 
); 

} 
+0

什麼'con sole.log(res.data.dataByID)'給你 –

+0

有目的地測試一個錯誤時,它不會達到這個目的。它會顯示上面的錯誤。當對有效數據進行測試時,它會打印出數據就好了@ p0k8_ – nicolascoding

+0

使用else塊中的最後一個return語句if(res.data.dataByID!== null){return grabDataCallback(null,res.data.dataByID) ; } else {return grabDataCallback(Boom.notFound('Data not found!')); }' –

回答

2

取而代之的是:

grabSomeData.then((fulfilled, rejected) => { 
    console.log('res: ' + fulfilled); 
    console.log('rej: ' + rejected); 
}); 

您需要使用:

grabSomeData.then((fulfilled) => { 
    console.log('res: ' + fulfilled); 
}, (rejected) => { 
    console.log('rej: ' + rejected); 
}); 

或者:

grabSomeData.then((fulfilled) => { 
    console.log('res: ' + fulfilled); 
}).catch((rejected) => { 
    console.log('rej: ' + rejected); 
}); 

欲瞭解更多信息的未處理拒絕警告(這將是在未來的致命錯誤)看到這樣的回答:

+0

Ok Awesome!,現在這個原理與Promise.all一起工作(因爲我一次拉多個異步事件? – nicolascoding

+0

@nicolascoding是的。當你運行Promise.all(...),然後你必須給函數作爲參數,然後像'Promise.all(...)。然後((val)=> console.log('value:',val) ,(err)=> console.log(err));'或者用一個函數然後用第二個函數調用'Promise.all(...)。then((val)=> console.log 'value:',val))。catch((err)=> console.log(err));'但你的'val'將是一個數組。 – rsp

相關問題