2016-06-21 156 views
1

例如:在Bluebird中傳遞變量的正確方法是什麼?

redis.get('xfers:Turkey').then(data => { 
    var GAME_ID = 25; 
    return [returnPromise, returnPromise2] 
}).spread((success, success2) => { 
    //GAME_ID here is undefined 
}); 

但是,你可以這樣做:

redis.get('xfers:Turkey').then(data => { 
    var GAME_ID = 25; 
    return [returnPromise, returnPromise2, GAME_ID] 
}).spread((success, success2, GAME_ID) => { 
    //GAME_ID here is passed 
}); 

的正常工作,我只是覺得我做錯了什麼。如果我有很多創建的變量,我需要傳遞很多arguments。 (對於每個連續的連鎖店) - 我很好奇是否有更直觀的方法,謝謝!

+0

使用函數綁定值? –

回答

1

首先,回答你的問題 - 是否有一種更直觀的方式將值傳遞給承諾鏈 - 根據我的經驗,「返回」該值是因爲下一個回調參數是最好的。

如果您明智地使用這些基本工具,就可以實現代碼的良好清晰度和可維護性。以下是我在編寫承諾鏈時使用的一些基本規則:

  1. 不依賴於任何承諾結果的變量應在閉包中本地設置。在你的例子中GAME_ID看起來很不錯。
  2. 如果可能,一次執行一個異步操作。這意味着返回一個數組然後'傳播'比具有簡單的一個物品管道的可讀性要差。
  3. 只有當你真的需要異步執行某些東西時才使用promise。有時候,它很有必要返回一個同步計算的值,並將其作爲參數傳遞給鏈中,但是您應該記住,承諾不是免費的,而是以事件循環計時爲代價。
相關問題