promise

//手写异步
// 在js中只要看到异步首先想到回调函数,将后续要做的事传入当前要做的事里面,当前的事做好后开始做后面的事
function buy(callback) {
setTimeout(function () {
var a="我做完饭了";
callback(a);
},2000)
}
buy(function cookie(val) {
console.log(val)
});

//promise是自带的用来解决回调问题d的类,可以直接new.有三个状态:等待,成功,失败
//promise的实例天生自带一个then方法,then方法有两个参数,第一个参数表示成功第二个表示失败
let p=new Promise((resolve,reject)=>{//回调函数直接运行默认是等待状态,什么时候某个参数执行了,状态发生改变
var a="北京";
resolve(a);//当调用resolve时表示成功,触发then里的第一个参数
});
p.then((data)=>{console.log(data)},(err)=>{});
//promise比我们自己写的好处就是不用我们自己传递函数了
promise封装ajax
function ajax({url="", method="get",datatype="json"}) {
    return new Promise((resolve,reject)=>{
        var xhr=new XMLHttpRequest();
        xhr.open(method,url,true);//参数顺序!!!
        xhr.responseText=datatype,
        xhr.onload=function () {
            resolve(xhr.response);//获取数据成功调取成功的方法
        };
        xhr.onerror=function (err) {
            reject(err)
        }
        xhr.send()
    })
}

// ajax({url:"shopping.json"}).then((data)=>{this.products=JSON.parse(data)},(err)=>{console.log(err)})
//我们自己写的ajax用法和axios一样。axios就是类似这样封装的。。
// 函数执行返回一个promise对象

  

 
posted @ 2019-08-11 16:04  匆匆那年cc  阅读(160)  评论(0编辑  收藏  举报