promise联合国戒指 promise promise戒指什么意思( 二 )


let count = 0;function getData1() { setTimeout( () => { console.log(&39;第一条数据加载成功&39;); count ++; func(); },1000);}function getData2() { setTimeout( () => { console.log(&39;第二条数据加载成功&39;); count ++; func(); },1000);}function getData3() { setTimeout( () => { console.log(&39;第三条数据加载成功&39;); count ++; func(); },1000);}function getData4() { setTimeout( () => { console.log(&39;第四条数据加载成功&39;); count ++; func(); },1000);}// 写一个方法:function func() { if(count < 4)return; console.log(&39;全部拿到了&39;);}调用
getData1();getData2();getData3();getData4();

promise联合国戒指 promise promise戒指什么意思

文章插图
let err = false;function getData1() { setTimeout( () => { console.log(&39;第一条数据加载成功&39;); if(status) err = true; count ++; func(); },1000);}function func() { if(count < 4)return; console.log(&39;全部拿到了&39;); if(err) { // ... }}Promise.race()Promise.race([promise1, promise2]) : Promiselet p = Promise.race([getData1(), getData2(),getData3()]);p.then (data=>{ console.log(data);})let flag = false;function func(data) { if(flag) return flag = true; console.log(data);}function getData1() { setTimeout(()=>{ console.log(&34;第一条数据加载成功&34;); func({name: &39;da&39;}); },500);}function getData2() { setTimeout( () => { console.log(&34;第二条数据加载成功&34;); func({name: &39;dada&39;}); }, 1000);}getData1();getData2();第一条数据加载成功{name: &39;da&39;}第二条数据加载成功Promise.resolve与Promise.rejectPromise.resolve() 与 Promise.reject()
// Promise.resolve传递一个普通的值let p1 = new Promise(resolve => { resolve(&39;成功!&39;);});let p2 = Promise.resolve(&39;成功!&39;);// 传递一个promise实例let pro = new Promise(resolve => { resolve(&39;da&39;);});let p = Promise.resolve(pro);p.then(data => void console.log(data));let obj = { then (cb) { console.log(&39;da&39;); da(&39;dada&39;); }, method() { console.log(&39;coding&39;); }}// 立即执行Promise.resolve(obj).then(data => { console.log(data);});Promise异步:
console.log(1);let p = new Promise(resolve => { console.log(2); resolve(); console.log(3);});console.log(4);p.then(()=>{ console.log(5);});console.log(6);// 123465Promise改善了传统回调造成的代码难维护 , 控制反转等问题 , promise是异步的 , 如果all接收的是空数组 , 马上会被决议为成功 , 如果race接受的是空数组 , 那么会被永远挂起 , 无限捕获错误问题 。
resove和reject方法:
如果接收的是普通的值 , 那么就会立即决议为成功 , 并填充这个值 , 如果接收的是一个promise实例 , 那么返回这个promise实例 , 如果接收的是个thenable对象 , 则会把它包装成promise对象 , 并立即执行这个对象的then方法 , reject会产生一个决议失败的promise并直接传递值 。
JavaScript/ES6 PromiseJavaScript的Promise代表一个操作的结果还没有结果 , 就是如网络请求操作 , 当我们从某个数据源获取数据的时候 , 没有办法确定它什么时候能够返回 , 接受到响应 。
Promise提供标准
doSomething() .then(doSomethingElse) .catch(handleError) .then(doMore) .then(doFinally) .catch(handleAnotherError)创建Promise
一个Promise使用Promise构造器创建 , 接受两个参数resolve , reject
var promise = new Promise( function(resolve, reject) { // new Promise resolve() reject()}XMLHttpRequest的promise版本:function get(url) { return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.open(&39;GET&39;, url); req.onload = function() { if(req.status == 200) { resolve(req.response); }else{ reject(Error(req.statusText)); } }; req.onerror = function() { reject(Error(&34;Network Error&34;)); }; req.send(); }); }使用Promise
get(url) .then(function(response) { },function(err) { })处理错误:
get(url) .then(function(response){ }, undefined) .then(undefined, function(err){ })get(url) .then(function(response){ }) .catch(function(err){ })链式
get(url) .then(function(response){ response = JSON.parse(response); var secondURL = response.data.url return get(secondURL); }) .then(function(response){ response = JSON.parse(response); var thirdURL = response.data.url return get(thirdURL); }) .catch(function(err){ handleError(err); });并行执行Promise
Promise.all()方法每个promise数组成为则决议为成功 , 如果数组中有任意一个promise为失败则决议为失败 。
任务一 , 任务二 , 任务三 , .then() -> success 任务成功
ES6Promise对象用于表示一个异步操作的最终状态 , 以及其返回的值 。