(JavaScript) 异步JavaScript

2022-06-05  本文已影响0人  布呐呐u

一) Callbacks

异步callbacks其实就是函数,只不过是作为参数传递给那些在后台执行的其他函数. 当那些后台运行的代码结束,就调用callbacks函数,通知你工作已经完成,或者其他有趣的事情发生了。使用callbacks有一点老套,在一些老派但经常使用的API里面,你会经常看到这种风格。

button.addEventListener('click',() => {
  alert("You clicked me!")

  let newElem = document.createElement('p')
  newElem.textContent = 'This is a new-element.'
  document.body.appendChild(newElem)
})
function loadAsset(url,type,callback) {
  let xhr = new XMLHttpRequest()
  xhr.open("GET",url)
  xhr.responseType = type

  xhr.onload = function() {
    callback(xhr.response)
  }

  xhr.send()
}

function displayImage(blob) {
  let objectURL = URL.createObjectURL(blob)

  let image = document.createElement("img")
  image.src = objectURL
  document.body.appendChild(image)
}

loadAsset("coffee.jpg","blob",displayImage)
const gods = ['Apollo','Artemis','Ares','Zeus']

gods.forEach(function (eachName,index){
  console.log(index + "." + eachName)
})

二) Promises

Promises 是新派的异步代码,现代的web APIs经常用到。

fetch('products.json').then(function(response) {
  return response.json();
}).then(function(json) {
  products = json;
  initialize();
}).catch(function(err) {
  console.log('Fetch problem: ' + err.message);
});

三) Promises 与 Callbacks 比较

promises与旧式callbacks有一些相似之处。它们本质上其实就是返回一个object对象,您可以将回调函数附加到该对象上,而不必将回调作为参数传递给另一个函数。
Promise是专门为异步操作而设计的,与Callbacks相比,具有如下优点:

上一篇 下一篇

猜你喜欢

热点阅读