概念學習
promise思維導圖學習
Promise 對象用于延遲(deferred) 計算和異步(asynchronous ) 計算.。一個Promise對象代表著一個還未完成,但預期將來會完成的操作。 Promise 對象是一個返回值的代理,這個返回值在promise對象創建時未必已知。它允許你為異步操作的成功或失敗指定處理方法。 這使得異步方法可以像同步方法那樣返回值:異步方法會返回一個包含了原返回值的 promise 對象來替代原返回值。
具體應用
現在我們已經知道promise就是javascript下一個對象,也擁有自己的方法,用來處理javascript中的異步請求,比如ajax請求,文件的讀寫。
首先我們先來了解下promise的具體語法
new Promise(
function(resolve, reject) {...} //在這個函數內可以進行一些耗時外部數據請求,其中兩個參數也是函數,分別用來解決promise請求處理成功或失敗
);
我們可以調用promise.then
方法來對請求的數據進行處理顯示。
下面是一個具體的例子
demo.js
console.log('start');
var myFirstPromise = new Promise(function(resolve, reject){
//當異步代碼執行成功時,我們才會調用resolve(...), 當異步代碼失敗時就會調用reject(...)
//在本例中,我們使用setTimeout(...)來模擬異步代碼,實際編碼時可能是XHR請求或是HTML5的一些API方法.
setTimeout(function(){
resolve("成功!"); //代碼正常執行!
}, 2500);
});
console.log('hello');
myFirstPromise.then(function(successMessage){
//successMessage的值是上面調用resolve(...)方法傳入的值.
//successMessage參數不一定非要是字符串類型,這里只是舉個例子
console.log("Yay! " + successMessage);
});
console.log('world');
控制臺輸出為
start
hello
world
Yay! 成功!
上面的例子中由于我在setTimeout函數中設置等待時間為2.5s,所以其他其他部分的代碼就會先于請求代碼執行,這也就是異步處理的實質了,將耗時的外部請求放在異步代碼中,這樣就不會影響主流程的執行,用戶體驗也會得到提升。
github在線demo地址 :https://github.com/DQing/promise-demo