首頁 > web前端 > js教程 > 主體

「.then(function(a){ return a; })」實際上為 Promise 做任何事情嗎?

Barbara Streisand
發布: 2024-11-10 14:58:03
原創
534 人瀏覽過

Does

「.then(function(a){ return a; })」對 Promise 有影響嗎?

在Bookshelf 中使用Bluebird Promise 時,開發人員經常會遇到這樣的情況:使用類似於下面的模式:

var getEvents = function(participantId) {
  return new models.Participant()
    .query({where: {id: participantId}})
    .fetch({withRelated: ['events'], require: true})
    .then(function(model) {
      return model;
    });
};
登入後複製

但是,此程式碼會給那些不熟悉Promise的人帶來問題。 then 函數對程式碼的整體行為有任何有意義的影響嗎?如果沒有它,下面的實現能否達到相同的結果?

var getEvents = function(participantId) {
  return new models.Participant()
    .query({where: {id: participantId}})
    .fetch({withRelated: ['events'], require: true});
};
登入後複製

解開謎團

問題的關鍵在於傳遞給then的函數參數。此參數預計會收到鏈中前一個 Promise 的回傳值。因此,看來 return a; then 函數中的語句本質上是無操作,因為它只是不會改變地傳遞接收到的參數。

為什麼要保留 Then()?

儘管它有明顯的冗餘,但 then 函數還是有用的某些用例中的目的。一個例子是,當傳回的 Promise 需要在整個鏈中進行不同的處理時。例如,它可以被記錄、轉換為 JSON 或以自訂方式處理。另一個優點是 then 函數允許錯誤處理,儘管這也可以透過 did 來實現,這取決於所使用的 Promise 函式庫。

最佳實踐

一般來說,建議只當真正需要時再使用。不必要的 then 函數會為程式碼庫增加不必要的複雜度並增加出錯的可能性。作為一般經驗法則,僅當傳回的 Promise 的結果或錯誤需要明確修改或處理時才合併 then。

以上是「.then(function(a){ return a; })」實際上為 Promise 做任何事情嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板