在這個來自MDN 的例子中,如果我們使用舊式異步回呼和吃披薩的步驟類比,他們試圖展示什么是異步鏈。
chooseToppings(function(toppings) {
placeOrder(toppings, function(order) {
collectOrder(order, function(pizza) {
eatPizza(pizza);
}, failureCallback);
}, failureCallback);
}, failureCallback);
為什么在每一步之前的函式引數作為引數傳遞給內部函式?為什么他們不在每個函式中提供任何代碼?下面的代碼更好嗎?
chooseToppings(function(toppings) {
//some work with toppings
placeOrder(function(order) {
//some work with order
collectOrder(function(pizza) {
eatPizza(pizza);
}, failureCallback);
}, failureCallback);
}, failureCallback);
uj5u.com熱心網友回復:
這里有兩個主要想法:
toppings不是 的引數chooseToppings,而是它的結果值。它不是一個return值,而是異步傳遞給chooseToppings接收的回呼。所以chooseToppings產生toppings,placeOrder(toppings)產生一個order并collectOrder(order)產生一個pizza。- 每個函式都取決于前一個函式的結果。您不能在不知道澆頭的情況下下訂單。通過傳遞值而不是背景關系來明確這些依賴項。如果您沒有這些依賴項,則可以一次呼叫所有函式,而無需等待異步結果。
為什么他們不在每個函式中提供任何代碼?
因為這些只是示例函式,所以它們的實作并不重要。你可以假設placeOrder所有的// work with toppings,不管是什么 - 本指南只關注如何按順序呼叫這些異步函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/344618.html
標籤:javascript 异步 打回来
