Discuss / JavaScript / 用Promise如何简化异步处理

用Promise如何简化异步处理

Topic source

WUDAJUN

#1 Created at ... [Delete] [Delete and Lock User]

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?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

如何定义成功和失败由处理函数决定:

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失败呢?

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

假设你返回{"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

Reply