在Bluebird中传递variables的正确方法是什么?

例如:

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 }); 

哪个工作正常,我只是觉得我做错了什么。 如果我有很多创build的variables,我需要传递很多arguments 。 (对于每一个连续的链) – 我很好奇,如果有一个更直观的方法,谢谢!

首先,回答你的问题 – 有没有一种更直观的方式来传递价值链上的价值 – 不,根据我的经验“返回”的价值,因为下一个callback参数是最好的,你可以得到。

如果你明智地使用这些基本工具,就可以实现代码的良好清晰度和可维护性。 以下是我在编写承诺链时使用的一些基本规则:

  1. 不依赖任何承诺结果的variables应该在闭包中本地设置。 在你的例子中, GAME_ID看起来像是一个很好的候选人。
  2. 如果可能的话,一次执行一个asynchronous操作。 这意味着返回一个数组然后“传播”比具有简单的一个物品pipe道的可读性要差。
  3. 只有当你真的需要asynchronous执行某个东西时才使用promise。 有时候,它会强制返回一个同步计算的值,并将其作为一个parameter passing给链中,但是您应该记住,承诺不是免费的,而是以事件循环计时为代价。