當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript的promise
生活随笔
收集整理的這篇文章主要介紹了
javascript的promise
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
'use strict';
// ajax函數將返回Promise對象:
function ajax(method, url, data) {var request = new XMLHttpRequest();return new Promise(function (resolve, reject) {request.onreadystatechange = function () {if (request.readyState === 4) {if (request.status === 200) {resolve(request.responseText);} else {reject(request.status);}}};request.open(method, url);request.send(data);});
}var log = document.getElementById('test-promise-ajax-result');
var p = ajax('GET', '/api/categories');
p.then(function (text) { // 如果AJAX成功,獲得響應內容log.innerText = text;
}).catch(function (status) { // 如果AJAX失敗,獲得響應代碼log.innerText = 'ERROR: ' + status;
});
實現原理 //例1
function getUserId() {return new Promise(function(resolve) {//異步請求http.get(url, function(results) {resolve(results.id)})})
}getUserId().then(function(id) {//一些處理
})function Promise(fn) {var value = null,callbacks = []; //callbacks為數組,因為可能同時有很多個回調this.then = function (onFulfilled) {callbacks.push(onFulfilled);};function resolve(value) {callbacks.forEach(function (callback) {callback(value);});}fn(resolve);
} Promise.all() var p1 = new Promise(function (resolve, reject) {setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {setTimeout(resolve, 600, 'P2');
});
// 同時執行p1和p2,并在它們都完成后執行then:
Promise.all([p1, p2]).then(function (results) {console.log(results); // 獲得一個Array: ['P1', 'P2']
}); Promise.race() var p1 = new Promise(function (resolve, reject) {setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {setTimeout(resolve, 600, 'P2');
});
Promise.race([p1, p2]).then(function (result) {console.log(result); // 'P1'
});
//由于p1執行較快,Promise的then()將獲得結果'P1'。p2仍在繼續執行,但執行結果將被丟棄
總結
以上是生活随笔為你收集整理的javascript的promise的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET开源工作流驰ccflow从表数据
- 下一篇: Java™ 教程(Queue接口)