Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 简化量角器中的嵌套承诺_Javascript_Angularjs_Promise_Protractor_Nested - Fatal编程技术网

Javascript 简化量角器中的嵌套承诺

Javascript 简化量角器中的嵌套承诺,javascript,angularjs,promise,protractor,nested,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("widt

我有一个未知尺寸和位置的画布。我想根据量角器中画布的尺寸和位置模拟单击特定坐标

以下是一些工作,但相当乏味:

 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. 

当然,如果你违背了承诺的本质。谢谢你的帮助。

也许你可以使用一些链接
Q.all

e、 g


只是好奇为什么检索css值是一个异步操作?@jfriend00它是WebDriverstuff@Esailija-那么操作是远程的吗?这就是为什么它是异步的吗?@jfriend00 yeah:“Gragrator是AngularJS应用程序的端到端测试框架。Gragrator是一个构建在WebDriverJ之上的Node.js程序。Gragragrator针对在真实浏览器中运行的应用程序运行测试,并像用户一样与之交互。”@jfriend00我对异步编程不太熟悉,据我所知,同步测试会让它变得容易得多。你能解释一下它是如何工作的和/或添加到相关量角器文档的链接吗?
Q.all([
         canvas.getCssValue("width"),
         canvas.getCssValue("height"),
         canvas.getCssValue("left")
         canvas.getCssValue("top")
      ])
    .then(function(width,height,left,top){
      // ...
     });
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
}));