[英]Promise reject not working inside of callback
我正在編寫一個使用Google API的模塊,但是在承諾中包裝了所有基於回調的內容。 這是問題區域的代碼
file1.js
var File2 = require('file2')
var api = new File2()
api.auth().then(auth => {
api.search('example').then(res => {
...do some stuff...
})
}).catch(err => {
console.log('1') //Not being run
throw err
})
file2.js
class File2(){
auth() {
...works fine and resolves...
}
search() {
return new Promise((resolve, reject) => {
googleapi.somemethod(options, (err, res) => {
if(err) {
console.log('2') // DOES run
reject(new Error(err))
}
resolve(res.field) //Program crashes here because reject didn't actually reject
})
})
}
對auth
的調用工作正常,但對search
(尤其是googleapi.somemethod
)的調用失敗,並且定義了err
。 我檢查err,然后console.log('2')
運行,但是catch
中的console.log('1')
沒有運行,沒有拋出錯誤,並且程序在resolve(res)
上崩潰了,因為res
未定義。 我試圖把錯誤捕手作為第二個參數then
,而不是使用catch
,但仍然無法正常工作
api.search('example').then(res => {
...do some stuff...
}, err => {
console.log('2') // Still doesn't run
throw err
})
我正在運行Node v6.2.1
您應該退還諾言:
var File2 = require('file2')
var api = new File2()
api.auth().then(auth => {
return api.search('example').then(res => { // return the promise
return ...
})
}).catch(err => {
console.log('1') // Not being run
throw err
})
另外,如果您在search
不需要auth
,則可以取消這些承諾:
var File2 = require('file2')
var api = new File2()
api.auth().then(auth => {
return api.search('example')
}).then(res => {
return ...
}).catch(err => {
console.log('1') //Not being run
throw err
})
調用reject()不會停止您的程序,下面的所有代碼也將被執行。
請從更新
if(err) {
console.log('2') // DOES run
reject(new Error(err))
}
resolve(res.field) //Program crashes here because reject didn't actually reject
至
if(err) {
console.log('2') // DOES run
reject(new Error(err))
}
else {
resolve(res.field) //Program crashes here because reject didn't actually reject
}
*更新*或者您可以將代碼縮短為
if(err) {
console.log('2') // DOES run
return reject(err) // no need to new Error object
}
resolve(res.field) //Program crashes here because reject didn't actually reject
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.