JavaScript承诺混乱

前端之家收集整理的这篇文章主要介绍了JavaScript承诺混乱前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在努力掌握javascript承诺的概念.但是我遇到了一些问题.我在本地设置了一个非常小的Web服务(不要生气,Web服务不符合约定).这里有一些细节

/登陆/<用户名> /<密码> ==>登录系统,正确的用户名和密码都是noor 如果用户登录,可以在/ car /< brand> /< color> /< plate_number>上进行通话,

我没有对颜色,品牌,platenumber的类型进行任何验证

这个工作非常好,我正在记录并添加一辆车

$.ajax({type: "GET",url: url+"/login/noor/noor"})
                .then(function( data,textStatus,jqXHR ) {console.log("login success");},function(){console.log("login error");})
                .then($.ajax({type: "GET",url: url+"/car/1/1/1"}))
                .then(function(){console.log("car added");},function(){console.log("car not added");});

这个完美地显示错误,因为使用了无效的URL:

$.ajax({type: "GET",url: url+"/carasdsad/1/1/1"})
                .then(function(){console.log("car added");},function(){console.log("car not added");});

“/ carasdsad / 1/1/1”是无效的网址,并且未添加已返回的汽车

我遇到了这个问题.下面的代码使用上面的代码.我期待着没有添加的汽车,但它的展示车增加

$.ajax({type: "GET",url: url+"/carasdsad/1/1/1"}))
                .then(function(){console.log("car added");},function(){console.log("car not added");});

上面的代码是返回汽车添加虽然“/ carasdsad / 1/1/1”是第二次调用中的无效网址.

最佳答案
根据spec,在当时的方法中忽略了非函数参数.

您的代码减少到最小的情况看起来像这样:

Promise.resolve(true)
    .then(Promise.reject("some err"))
    .catch(console.log.bind(console,"fail"));

并且需要以这种方式重写它以捕获错误

Promise.resolve(true)
    .then(function(){ return Promise.reject("some err") })
    .catch(console.log.bind(console,"fail"));

猜你在找的jQuery相关文章