Promise是什么?
Promise 是抽象异步处理对象以及对其进行各种操作的组件.
为什么使用promise?
解决地狱回调
function load() { $.ajax({ url: 'xxx.com', data: 'jsonp', success: function(res) { init(res, function(res) { render(res, function(res) { // 反复的嵌套下去 }); }); } }
}
load();
promise怎么用
promise是Es2016中提供的 原生对象,所以使用也比较简单.
// 直接 new 一下就可以 let load = new promise((resovle,reject)=> { /* promise 是构造函数需要一个函数作为参数,该函数的两个参数别是resovle和reject. 它们是两个函数,由 JavaScript 引擎提供,不用自己部署。 */ setTimeout(resolve, 1000); }) load.then(() => { console.log("Hello"); // 1秒后输出"Hello" return wait1000; }).then(() => { console.log("World"); // 2秒后输出"World" });
ajax如何用呢?
let load = new promise((resovle, reject)=> { let xhr = new XMLHttpRequest(); xhr.open('get', url, true) xhr.onreadystatechange = function(){ if(this.status == 200 && this.readyState == 4){ return resovle(this.response) }else { return reject(this.statusText) } } xhr.send(form) }) load().then( res=> { console.log("Hello"); return load; }).then( res => { console.log("World"); })