极速赛车平台出租与Promise 处理

实际开发过程中经常会遇到异步的问题,比如:

   前端向后端发起请求request1,极速赛车平台出租[企俄:2152876294] 网址[diguaym.com](http://diguaym.com/forum.php)

需要获得数据data1,发起请求request2同时需要请求参数data1,需要获得数据data2,然后紧接着需要利用data2进行某项计算。。。。理想状态下,按思路代码一路执行下来,没毛病

 但是!ajax是一个异步的操作,由于网络延迟,request2执行时很可能request1还没有返回data1,于是获取不到data1,request2失败,SO,data2也获取不到了。。。然后一路错下去,当request1返回data1时,程序已经一路崩下去无可挽回了

看一个demo:

function test(resolve, reject){
let m = 22;;
setTimeout(function(){
m +=100;
if(m<111){
resolve(m)
}else{
reject(111);
}
}, 2000);
console.log("哈哈1");
}

var p = new Promise(test);
p.then(function(res){
console.log("成功:",res);
});
p.catch(function(res){
console.log("失败:",res);
})
console.log("哈哈2");

// 结果:
//——————————————————————————
// 哈哈1
// 哈哈2
// 失败: 111
而一般方法是利用回调函数来解决异步问题,然而回调函数这个东西我就感觉思维有点不合正常人类逻辑咯,而且代码也比较繁琐。于是乎,引入Promise是个十分不错的选择。顾名思义,Promise即 “承诺” 的意思,既然是承诺,一诺千金那肯定是必须要做的。所以Promise(test)的含义就是承诺在未来的某个时间肯定会执行函数f

   而函数f需要有两个参数:resolve 和 reject 。这两个参数都是函数。异步执行操作执行成功时调用resolve函数,失败时调用reject函数。(这两个函数是js引擎自带的不用自己定义哟)。而里面的参数,resolve的参数会传递给then的回调函数,reject的参数会传递给catch的回调函数然后对其进行进一步处理。

猜你喜欢

转载自blog.51cto.com/13927682/2161137
今日推荐