Discuss
/
JavaScript
/
用Promise如何简化异步处理
用Promise如何简化异步处理
Topic source如何定义成功和失败由处理函数决定:
if (request.status === 200) {
resolve(request.responseText);
} else {
reject(request.status);
}
上面的写法遇到200之外的响应肯定走catch
var log = document.getElementById('test-promise-ajax-result'); var p = ajax('GET', '/api/categories'); p.then(function (text) { // 如果AJAX成功,获得响应内容 log.innerText = text; }).catch(function (status) { // 如果AJAX失败,获得响应代码 log.innerText = 'ERROR: ' + status; });
老师,ajax失败和响应结果不是一回事儿,是吧?
那什么情况算是ajax失败呢?
假设你返回{"error":"login failed"}
就算失败:
if (request.status === 200) {
var r = JSON.parse(request.responseText);
if (r && r.error) {
reject(r.error);
} else {
resolve(r);
}
} else {
reject(request.status);
}
- 1
WUDAJUN
var log = document.getElementById('test-promise-ajax-result'); var p = ajax('GET', '/api/categories'); p.then(function (text) { // 如果AJAX成功,获得响应内容 log.innerText = text; }).catch(function (status) { // 如果AJAX失败,获得响应代码 log.innerText = 'ERROR: ' + status; });
如果把ajax的url写成一个错误的地址,按理说应该log出现catch里的function,但是log显示的是then里的function?