学过android的人都知道,java是基于多线程的,当需要执行一个耗时的操作,比如请求服务端的数据,此时往往需要开一个线程来执行。
但是在我们的js中,是单线程的,请求网路数据的话,我们无法判定什么时候会返回,如果网络情况不是很好的话那么就会很慢。所以不可能去等待他请求完成才去进行下一步操作。所以我们需要异步去请求数据,但是我们又需要知道请求的结果,此时我们就需要一个接口回调来告知我们这个请求的结果。
在ES6中,提供了promise来进行异步操作,并实现了回调。
用法如下:
var promise = new Promise(function (resolve, reject) {
// 进行一些异步或耗时操作
if (1) {
//条件满足,异步操作成功
resolve("success!");
} else {
//条件不满足
reject(Error("fail"));
}
});
//绑定处理程序
promise.then(function (result) {
//promise成功回调
console.log(result); // "success"
}, function (err) {
//promise失败回调
console.log(err); // Error: "fail"
});
实现起来有三步:
1. 第一步:创建一个promise对象,并在里边去做一些事情,比如Ajax请求数据
2. 第二步:在这个对象方法中,指定条件相应。比如ajax请求返回的数据state==200的时候,使用 resolve(“success!”);回调,如果不是,则使用 reject(Error(“fail”));
3. 第三步:使用 promise.then监听这两个回调函数,在成功或者失败的时候做出我们期望的相应操作。