已發ES6文章:
1~14
15
注意注意注意:
異步和回調函數
當我們做一個異步操作的時候(比如ajax請求),往往需要指定回調函數(success),並在特定的時候執行它。
//常見的ajax
$.ajax(
url:'xx',
success:functon(msg){
...
}
)
es6 中的 Promise 讓異步的回調可以通過then方法傳,例如
var p=new Promise(function(resolve){
$.ajax(
url:'xx',
success:resolve
)
});
p.then(successCallback);
函數 successCallback 會在 ajax 請求成功後執行,雖然是異步操作,但是在代碼上寫法是同步的:
先執行異步請求 > 請求完成後(then)執行成功函數。
以上就是 Promise 的作用,當然還有其他的功能。
Promise作用
Promise 讓異步操作可以以同步的形式寫出來,避免了層層嵌套的尷尬。
比如 ajax 定時器 事件等。
Promise( fn(resolve,reject) ) 構造函數
用來創建Promise對象,參數是個函數,該函數可以介接收2個參數:resolve 和 reject。
- resolve(value)
函數,在你認為成功時調用它,value是你想傳的值
- reject(value)
函數,在你認為失敗時調用它
Promise 在實例化過程中會立馬執行fn, 遇到resolve會等待回調被then方法傳入後執行,遇到reject則會立即執行,此時沒傳入回調則報錯 Uncaught (in promise)。
then(resolve, reject) 方法
將回調函數傳給 Promise 對象,它和 fn(resolve,reject) 的參數對應,且回調函數傳入到執行是異步的(沒傳入則不執行)。
resolve & reject 函數會在 Promise 內被調用後執行,或是在代碼執行完/報錯後執行。
// 形式
var promise=new Promise(function(resolve,reject){
...
});
promise.then(resolve,reject);
then是可鏈式調用的,也是按照順序執行。
var p=new Promise(function(r){
setTimeout(r,1000)
};
p.then(function(){
console.log(1)
}).then(function(){
console.log(2)
});
//1
//2
實際上then方法必須返回新Promise對象,可以手動返回(return)也可默認返回(單純執行resolve),因為返回了新Promise,所以可以鏈式調用
then方法的返回值會被傳入下一個then方法的回調函數里
var p=new Promise(
function(resolve,reject){
resolve()
}
);
p.then(function(){
console.log(1);
return 2;
}).then(function(x){
console.log(x)
});
//1
//2
文章到這裡結束,下篇 ☞ Promise下
【關注一下不迷路~】
【html】【css】【html】【css】【javascript】【html】【javascript】【css】【javascript】【css】
閱讀更多 全棧前端 的文章
關鍵字: 編程語言 JavaScript 技術