<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] * * * * * > 異步執行代碼的一種解決方案 ![](https://box.kancloud.cn/9b03684f98cc75bb874b69f830bd99bb_512x280.png) ### 1.Promise實例的幾種狀態: ~~~ 1. pending: 初始狀態,既不是成功,也不是失敗狀態。 2. fulfilled: 意味著操作成功完成。 3. rejected: 意味著操作失敗。 ~~~ * * * * * ### 2. 最常用的實現 ~~~ var pro0=new Promise(function(resolve, reject) { console.log('開始定義 pro0'); var pro1=new Promise(function(resolve, reject) { console.log('開始定義 pro1'); resolve(1); }); setTimeout(function() { console.log('setTimeout回調函數執行'); resolve(0); }, 2000); //resolve(2); /* 假如這里有個 resolve(2),那么 pro0 的狀態就會被改變, 且改變之后不會再變,那么 setTimeout 里的 resolve 就不再起作用了 */ pro1.then(function(value) { console.log('pro1 fulfilled',value); }); }); pro0.then(function(value) { console.log('pro0 fulfilled',value); }); pro0.catch(function(e) { console.log('pro0 rejected',e); }); console.log('代碼定義end'); ~~~ a. 正常執行: ![](https://box.kancloud.cn/d1607487474ced2026a343807cb86dff_256x215.png) b. 提前變狀態: ![](https://box.kancloud.cn/460d19a1cf9df782574c8fcf5aec6959_253x211.png) * * * * * ### 3. 鏈式調用 ~~~ Promise.prototype.then 和 Promise.prototype.catch 方法 返回 Promise 對象, 所以它們可以被鏈式調用。 ~~~ ![](https://box.kancloud.cn/d15312e3e5d609c80b2de1cca2826f49_801x297.png) ~~~ 這里是模擬了鏈式調用,用同步代碼,真實情況中應該是異步代碼 job1.then(job2).then(job3).catch(handleError); 其中,job1、job2和job3都是Promise對象。 function job0(input) { return new Promise(function(resolve, reject) { let result=input+1; console.log('值+1:',result); resolve(result); }) } function job1(input) { return new Promise(function(resolve, reject) { let result=input*2; console.log('值*2:',result); resolve(result); }) } function job2(input) { return new Promise(function(resolve, reject) { let result=input*input; console.log('值的平方:',result); resolve(result); }) } function done(input) { console.log('原始值:',input); job0(input) .then(job1) .then(job2); } ~~~ 執行結果為: ![](https://box.kancloud.cn/c4bd8c4286a676f1b7803e153ef5c810_169x153.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看