1、實例方法
(1).then 得到異步任務的正確結果
(2).catch 獲取異常信息
(3).finally 成功與失敗都會執行
<script> function foo() { return new Promise(function(resolve, reject) { // resolve('成功'); reject('失敗') }) } // ----------------------------------------- 方法一 foo() .then(function(data) { console.log('then'); }) .catch(function(data) { console.log('catch'); }) .finally(function(data) { console.log('finally'); }) // ----------------------------------------- 方法二 foo() .then(function(data) { console.log('then'); }, function(data) { console.log(data); }) .finally(function(data) { console.log('finally'); }) </script>
2、對象方法
(1)Promise.all() 並發處理多個異步任務,所有任務都能執行完成才能得到結果
function queryData(url) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return; } if (xhr.readyState == 4 && xhr.status == 200) { resolve(xhr.responseText); } else { reject('服務器錯誤'); } }; xhr.open('get', url); xhr.send(); }); } var p1 = queryData('http://localhost:3000/a1'); var p2 = queryData('http://localhost:3000/a2'); var p3 = queryData('http://localhost:3000/a3'); Promise.all([p1, p2, p3]).then((data) => console.log(data));
(2)Promise.race() 並發處理多個異步任務,只要有一個任務完成就能得到結果
function queryData(url) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return; } if (xhr.readyState == 4 && xhr.status == 200) { resolve(xhr.responseText); } else { reject('服務器錯誤'); } }; xhr.open('get', url); xhr.send(); }); } var p1 = queryData('http://localhost:3000/a1'); var p2 = queryData('http://localhost:3000/a2'); var p3 = queryData('http://localhost:3000/a3'); Promise.race([p1, p2, p3]).then((data) => console.log(data));