JS Promise 链 .catch() 在被拒绝后不工作
JS Promise chain .catch() not working after rejected
我无法让 .catch
工作。我尝试了多种解决方案,例如 throw
和未注释的 reject()
。
我很困惑为什么它不起作用,因为我测试了 它似乎工作完全相同,但导致工作 .catch
.
我收到此错误:Unhandled rejected promise: 404 Not Found
好像我没有处理拒绝。
简化版代码:
makeRequest(theUrlOne)
.then(result => makeRequest(theUrlTwo))
.catch(result => console.log(result)) // not working, but not the problem
.then(result => resolve('Success.'))
.catch(result => resolve('Failed.')) // the problem-child
function makeRequest(url, method, datatype, timeout) {
return new Promise(function (resolve, reject) {
http.simpleRequest({
'method': method || 'GET',
'url': url,
'dataType': datatype || 'json',
'timeout': timeout || 6000,
}, function (error, response) {
if (error) {
return Promise.reject(error)
// reject(error)
}
if (response.statusCode != 200) {
return Promise.reject(response.status)
// reject(response.status)
}
let parsed = JSON.parse(response.data)
resolve(parsed);
});
})
}
原来我的第一个解决方案确实有效,但我误解了输出。
if (error) {
reject(error)
}
if (response.statusCode != 200) {
reject(response.status)
}
我无法让 .catch
工作。我尝试了多种解决方案,例如 throw
和未注释的 reject()
。
我很困惑为什么它不起作用,因为我测试了 .catch
.
我收到此错误:Unhandled rejected promise: 404 Not Found
好像我没有处理拒绝。
简化版代码:
makeRequest(theUrlOne)
.then(result => makeRequest(theUrlTwo))
.catch(result => console.log(result)) // not working, but not the problem
.then(result => resolve('Success.'))
.catch(result => resolve('Failed.')) // the problem-child
function makeRequest(url, method, datatype, timeout) {
return new Promise(function (resolve, reject) {
http.simpleRequest({
'method': method || 'GET',
'url': url,
'dataType': datatype || 'json',
'timeout': timeout || 6000,
}, function (error, response) {
if (error) {
return Promise.reject(error)
// reject(error)
}
if (response.statusCode != 200) {
return Promise.reject(response.status)
// reject(response.status)
}
let parsed = JSON.parse(response.data)
resolve(parsed);
});
})
}
原来我的第一个解决方案确实有效,但我误解了输出。
if (error) {
reject(error)
}
if (response.statusCode != 200) {
reject(response.status)
}