在量角器中简化嵌套承诺

时间:2015-02-10 21:39:06

标签: javascript angularjs promise protractor nested

我的画布尺寸和位置未知。我想基于量角器中画布的尺寸和位置来模拟单击特定坐标。

以下作品,但相当繁琐:

 var canvas = element(by.id("canvas")); 

 canvas.getCssValue("left").then(function (left) {

            canvas.getCssValue("top").then(function (top) {

                canvas.getCssValue("width").then(function(oldWidth) {

                        canvas.getCssValue("height").then(function (oldHeight) {

                        // some code that uses left, top, oldWidth and oldHeight together

                                })
                            })

                        })
                    }
                )
            })
        })

是否有更优雅的方式一次性使用所有这些承诺?我真的想做以下事情:

var width = canvas.getCssValue("width");
var height = canvas.getCssValue("height");

var left = canvas.getCssValue("left");
var top = canvas.getCssValue("top");

//code that uses these variables. 

但当然如果违背承诺的性质。谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

function spreader(fn) {
    return function(arr) {
        return fn.apply(this, arr);
    }
}

var width = canvas.getCssValue("width");
var height = canvas.getCssValue("height");

var left = canvas.getCssValue("left");
var top = canvas.getCssValue("top");

protractor.promise.all(width, height, left, top)
    .then(spreader(function(width, height, left, top) {
    // Use width, height, left, top as values
}));

答案 1 :(得分:0)

也许你可以使用linke Q.all

https://github.com/kriskowal/q#combination

e.g。

Q.all([
         canvas.getCssValue("width"),
         canvas.getCssValue("height"),
         canvas.getCssValue("left")
         canvas.getCssValue("top")
      ])
    .then(function(width,height,left,top){
      // ...
     });