var promise = new Promise(function (resolve, reject) { setTimeout(resolve, 500, 'P1'); });
或者javascript
function createPromise(){ return new Promise(function (resolve, reject) { resolve(request.responseText); }); }
var p = new Promise(function (resolve, reject) { log('start new Promise...'); resolve(123); }); p.then().then()....
或者java
var p=Promise.resolve('13'); 或者 var p=Promise.resolve('13'); p.then().then()
then 函數是能夠有兩個參數函數的,fulfilled rejected,通常只寫一個函數 fulfilled;segmentfault
若是兩個參數函數,都是同步函數,則 then 函數按照順序執行;若是上一個 then 函數執行的結果,不返回 promise,則默認執行 fulfilled 函數;promise
var promise = Promise.reject("1"); promise .then( config => { console.log("2"); }, err => { console.log("3"); } ) .then( config => { console.log("4"); }, err => { console.log("5"); } ) .then( config => { console.log("6"); }, err => { console.log("7"); } );
輸出:異步
3 4 6
[========]函數
var promise = Promise.resolve("1"); promise .then( config => { console.log("2"); }, err => { console.log("3"); } ) .then( config => { console.log("4"); }, err => { console.log("5"); } ) .then( config => { console.log("6"); }, err => { console.log("7"); } );
輸出:code
2 4 6
[========]ip
var promise = Promise.reject("1"); promise .then( config => { console.log("2"); }, err => { console.log("3"); } ) .then(() => Promise.reject("0")) .then( config => { console.log("6"); }, err => { console.log("7"); } ) .then( config => { console.log("8"); }, err => { console.log("9"); } );
輸出get
3 7 8
var promise = Promise.reject("1"); promise .then( config => { console.log("2"); }, err => { console.log("3"); } ) .then(() => { console.log("trigger timeout"); setTimeout(() => { console.log("exec timeout"); }); }) .then( config => { console.log("6"); }, err => { console.log("7"); } ) .then( config => { console.log("8"); }, err => { console.log("9"); } );
輸出input
3 trigger timeout 6 8 exec timeout
若是兩個參數函數,返回 promise,則後面的 then 會等待前面的 promise 執行完以後,纔去執行;
// 0.5秒後返回input*input的計算結果: function multiply(input) { return new Promise(function(resolve, reject) { log("calculating " + input + " x " + input + "..."); setTimeout(resolve, 500, input * input); }); } // 0.5秒後返回input+input的計算結果: function add(input) { return new Promise(function(resolve, reject) { log("calculating " + input + " + " + input + "..."); setTimeout(resolve, 500, input + input); }); } var p = new Promise(function(resolve, reject) { log("start new Promise..."); resolve(123); }); p.then(multiply) .then(add) .then(multiply) .then(add) .then(function(result) { log("Got value: " + result); });
const f = () => console.log("now"); Promise.resolve().then(f); console.log("next"); // next // now
這個問題涉及到 這一次,完全弄懂 JavaScript 執行機制