js技巧篇(四)异步JavaScript

2018, Nov 17    

回调(callback)

回调到处可见。简单说,将函数的引入当作参数处理,什么时候需要调用就()执行

function add (x, y) {
  return x + y
}

function addFive (x, addReference) {
  return addReference(x, 5) // 15 - 按下按钮,运行机器。
}

addFive(10, add) // 15

但是会形成”回调地狱”,回调太深可读性不好,因为回调传入,控制权交给别人,可能出现控制反转。

Promise

   function getPromise () {
     return new Promise((resolve) => {
       setTimeout(resolve, 2000)
     })
   }

   function logA () {
     console.log('A')
   }

   function logB () {
     console.log('B')
   }

   function logCAndThrow () {
     console.log('C')

     throw new Error()
   }

   function catchError () {
     console.log('Error!')
   }

   getPromise()
     .then(logA) // A
     .then(logB) // B
     .then(logCAndThrow) // C
     .catch(catchError) // Error!