在Bluebird中传递变量的正确方法?

时间:2016-06-21 19:09:20

标签: node.js 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。 (对于每个连续的链条) - 我很好奇是否有更直观的方法,谢谢!

1 个答案:

答案 0 :(得分:1)

首先,回答你的问题 - 是否有更直观的方法将值传递到承诺链 - 不,根据我的经验'返回'值,因为下一个回调参数是你能得到的最好的。

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

  1. 不依赖于任何promise的结果的变量应该在闭包中本地设置。在您的示例中,GAME_ID看起来很适合。
  2. 如果可能,一次执行一个异步操作。这意味着返回数组然后“传播”的可读性低于简单的一个项目管道。
  3. 只有在您必须异步执行某些操作时才使用promise。有时候返回一个同步计算的值并将其作为一个参数传递到链中是很有吸引力的,但是你应该记住,promises不是免费的,而是以事件循环滴答为代价。