微聊 Promise 试做一回

昨天说到 Promise 的好处多多,今天来说一下 Promise 是该怎麽用呢?其实使用 Promise 不困难,微人来简单的试做一个。一个 Promise 是一个根据附加给他的 Callback 回传的物件,以取代传递 Callback 到这个函数。
Promise 可以透过建构子建立。所以用建构子包裹旧的 API就可以唷。正常情况下,所有非同步函数都会回传 Promise,然而许多 API 仍然用旧的方式来传递成功、失败 Callback,setTimeout()就是一个个典型的例子:

const timeoutPromise = ms => new Promise((resolve, _reject) => {
  setTimeout(() => {
    resolve();
  }, ms);
})

说明一下,Promise 建构子需要一个运作函数来正规地处理或拒绝。但由於在 setTimeout()这个情况下不会有失败的状况,所以这里不需要 reject。
在 ECMAScript 2017 中在有 async/await 的语法可以搭配使用,让同步程序可以更进一步。例如:

const startTask = async (orderDiv, name, ms) => {
  const stepP = document.createElement('p');
  stepP.textContent = name;
  orderDiv.appendChild(stepP);
  if (ms) {
    await timeoutPromise(ms);
  }
}

document.addEventListener('DOMContentLoaded', () => {
  const ordersDiv = document.querySelector('.orders');

  // 点热狗
  document.getElementById('order-hot-dog').addEventListener('click', async () => {
    const orderDiv = document.createElement('div');
    orderDiv.className = 'p-4 border-dashed border-4 border-gray-600';

    ordersDiv.appendChild(orderDiv);

    await startTask(orderDiv, '接到热狗订单', 300);
    await startTask(orderDiv, '把热狗放入微波炉,开始微波', 2000);
    await startTask(orderDiv, '微波完成,拿给客人');
  });
});

是不是感觉很简单呢?其实我刚开始真的完全没办法理解这个用法,还好有高手相助,终於学起来了。
好啦!今天就先聊到这罗!明天见!掰哺。


<<:  DAY26 第一个完整程序练习,一台计算机!(一)

>>:  【I Love Vue 】 Day 27 爱荷华博弈任务(八) - 测验画面2

[夜市吃到饱] 除了夜市牛排,还有一种食物叫做「蒙古烤肉」~

新片上传Youtube中,没办法关电脑,只好再来写一篇,杀杀时间~ 后里夜市info: 时间:星期一...

[Day 2]餐前面包-事前工具准备

俗话说的好-工欲善其事,必先利其器 工程师们经过一代又一代的後浪推前浪,前浪死滩上之後 各种文字编辑...

Lottie套件使用 及日历制作 Day27

今天根据网路上的资料,试做了一个日历跟使用Lottie套件,未来要作为使用 介绍一下Lottie套件...

MLOps在金融产业:看懂金融审计如何导入ML专案(附所需文件清单)

在algorithmia的 2021 年报告显示,大多数组织在机器学习方面面临一定程度的监管负担,6...

EPC 事件驱动图

EPC (Event Driven Process-Chain) 事件驱动流程链是一种流程图应用在业...