【Day 28】JavaScript Promise

Promise 是甚麽?

Promise 是 ES6 引入的标准之一。 Promise 字面上的意思为「承诺」,表示非同步操作在未来终将实现(或产生错误),并同时取得该操作的结果值。
利用这种异步的执行机制,可以来规避函数的Callback Hell(回调地狱)。

何谓Callback Hell(回调地狱)? 连续执行两个或者多个异步操作是一个常见的需求,在上一个操作执行成功之後,开始下一个的操作,并带着上一步操作所返回的结果。在过去,要想做多重的异步操作,回调嵌套後,层层嵌套的代码的维护难度,和无法排除bug,这就会导致经典的回调地狱。

首先先创建promise物件
const promise = new Promise( /* executor */ function(resolve, reject) { ... } );

Promise的建构式接受一个执行函式(executor),用来定义非同步行为。执行函式会被马上呼叫并传入两个参数:(resolve, reject)。resolve 与 reject 函式,会在被个别呼叫时,个别执行之。通常 executor 函式会发起一些非同步操作。接着,成功完成後执行 resolve 以完成 promise;或如果有错误,执行 rejects。

一个 Promise 物件处於以下几种状态:
搁置(pending) :初始状态。
实现(fulfilled):表示操作成功。
拒绝(rejected) :表示操作失败。

之後再透过Promise.prototype.then() 或 Promise.prototype.catch() 方法回传 promise

let myPromise = new Promise(function( resolve , reject) {
  let js = 0;    
  if (js == 0) {
    console.log('OK');
    resolve();
  } else {
    console.log('Error');
    reject();
  }
});

myPromise
  .then(function() {console.log('resolve');
}).catch(function(){console.log('reject');
})

改为从promise返回值,不用return,须调用 resolve 和 reject ,这样就可以使用返回值做进一步处理

let myPromise = new Promise(function( resolve , reject) {
  let js = 1;    
  if (js == 0) {
    resolve('OK');
  } else {
    reject('Error');
  }
});

myPromise
  .then(function(msg) {console.log(`${msg}-resolve`);
}).catch(function(msg){console.log(`${msg}-reject`);
})

<<:  Angular ElementRef、TemplateRef、viewContainerRef 的区别

>>:  DAY13-EXCEL统计分析:F分配之介绍

Day17 NodeJS-Express II

今天要针对Routes和Middleware的部份进一步了解Express框架。 Express中的...

[25] 用 python 刷 Leetcode: 155 min-stack

原始题目 Design a stack that supports push, pop, top, ...

让服务器主动更新画面

通常来说服务器能变动页面资料是因为浏览器发出 request 所得到的 response 因而更新了...

效能分析除错方法

当你点了一个按钮,发现怎麽很久才出现结果,你可能会怀疑是不是 ZK 出了什麽问题?这是很直接的推断,...

开发过程必备除错基本知识 - 处理 HTTP 要求的内部运作

ZK 处理 zul 要求跟 ajax 要求是由不同的两个 servlet 处理,过程不太相同。 处理...