promise 在JavaScript的世界中,全部代碼都是單線程執行的。 因爲這個「缺陷」,致使JavaScript的全部網絡操做,瀏覽器事件,都必須是異步執行。異步執行能夠用回調函數實現 Promise對象必定會執行函數(承諾)而後,根據結果是成功仍是失敗,在未來的某個時候調用then函數或catch函數 例子: new Promise(test).then(function (result) { console.log('成功:' + result); }).catch(function (reason) { console.log('失敗:' + reason); }); 可見Promise最大的好處是在異步執行的流程中,把執行代碼和處理結果的代碼清晰地分離了 串行執行異步任務 job1.then(job2).then(job3).catch(handleError); 並行執行異步任務 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'] }); var p1 = new Promise(function (resolve, reject) { setTimeout(resolve, 500, 'P1'); }); var p2 = new Promise(function (resolve, reject) { setTimeout(resolve, 600, 'P2'); }); // 同時執行p1和p2,僅要1個完成後執行then: Promise.race([p1, p2]).then(function (result) { console.log(result); // 'P1' });