一、 promise
生活随笔
收集整理的這篇文章主要介紹了
一、 promise
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、 ? promise 1、如何讓異步操作有順序的執行? 方法1:嵌套 ajax1(ajax2(ajax3(...))) 方法2:異步改成同步 open(“GET/POST”,url,false) 缺點:如果后臺出現問題,一直忙,不能返回數據,瀏覽器將出現卡死的情況。 方法3:promise new Promise(ajax1).then(ajax2).catch() 優點:使用了鏈式調用代替了嵌套結構。 2、promise寫法 使用promise的寫法如下: 1.方法1 new Promise(function(resolve,reject){ ajax1({ url:”xxxx”, success:function(data){ resolve(); ?//成功回調的執行。 }, error:function(msg){ reject();?????//失敗回調的執行 } }); }).then(function(){ ajax2({ url:”xxxx”, success:function(data){ } }); }).catch(function(){ console.log(“請求出現錯誤:”,msg); }); 2.方法2 new Promise(ajax1).then( function(){return new Promise(ajax2)} ).then(ajax3); 3.方法3 new Promise( ajax1 ).then( function(){ return new Promise(ajax2) } ), then( function(){ return new Promise(ajax3) } ), then( ajax4 ); 4.promise.all 和 promise.race new Promise(function(resolve,reject){?? //p1 ajax1({ …… resolve() }); }).then(function(){ return new Promise(resolve,reject){? //p2 ajax2({ …… resolve(); }); } }).then(function(){ return new Promise(resolve,reject){? //p3 ajax3({ …… resovle() }); } }) (1)如果有三個ajax請求,調用順序無關,但必須保證三個都成功,才能開始第四個? Promise.all(function(){? //p123 return [p1,p2,p3]; }).then(function(){ return p4; }); (2)如果有三個ajax請求,只要任意一個成功,則開始第四個? Promise.race(function(){ return [p1,p2,p3]; }).then(function(){ return p4; }); - 擴展案例
var val = 1; // 我們假設step1, step2, step3都是ajax調用后端或者是在Node.js上查詢數據庫的異步操作 // 每個步驟都有對應的失敗和成功處理回調 // 需求是這樣,step1、step2、step3必須按順序執行 function step1(resolve, reject) { console.log('步驟一:執行'); if (val >= 1) { resolve('Hello I am No.1'); } else if (val === 0) { reject(val); } } function step2(resolve, reject) { console.log('步驟二:執行'); if (val === 1) { resolve('Hello I am No.2'); } else if (val === 0) { reject(val); } } function step3(resolve, reject) { console.log('步驟三:執行'); if (val === 1) { resolve('Hello I am No.3'); } else if (val === 0) { reject(val); } } new Promise(step1).then(function(val){ console.log(val); return new Promise(step2); }).then(function(val){ console.log(val); return new Promise(step3); }).then(function(val){ console.log(val); return val; }).then(function(val){ console.log(val); return val; }); // 執行之后將會打印 步驟一:執行 Hello I am No.1 步驟二:執行 Hello I am No.2 步驟三:執行 Hello I am No.3 Hello I am No.3
var val = 1; // 我們假設step1, step2, step3都是ajax調用后端或者是在Node.js上查詢數據庫的異步操作 // 每個步驟都有對應的失敗和成功處理回調 // 需求是這樣,step1、step2、step3必須按順序執行 function step1(resolve, reject) { console.log('步驟一:執行'); if (val >= 1) { resolve('Hello I am No.1'); } else if (val === 0) { reject(val); } } function step2(resolve, reject) { console.log('步驟二:執行'); if (val === 1) { resolve('Hello I am No.2'); } else if (val === 0) { reject(val); } } function step3(resolve, reject) { console.log('步驟三:執行'); if (val === 1) { resolve('Hello I am No.3'); } else if (val === 0) { reject(val); } } new Promise(step1).then(function(val){ console.log(val); return new Promise(step2); }).then(function(val){ console.log(val); return new Promise(step3); }).then(function(val){ console.log(val); return val; }).then(function(val){ console.log(val); return val; }); // 執行之后將會打印 步驟一:執行 Hello I am No.1 步驟二:執行 Hello I am No.2 步驟三:執行 Hello I am No.3 Hello I am No.3
轉載于:https://www.cnblogs.com/wangjizhi/p/6722838.html
總結
以上是生活随笔為你收集整理的一、 promise的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell脚本由基础变量及特殊变量($@
- 下一篇: Java当中的IO一