2016-06-21 106 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。有时候,它很有必要返回一个同步计算的值,并将其作为参数传递给链中,但是您应该记住,承诺不是免费的,而是以事件循环计时为代价。
相关问题