简化量角器中的嵌套承诺
Simplify nesting promises in protractor
我有一个尺寸和位置未知的 canvas。我想根据量角器中 canvas 的尺寸和位置模拟点击特定坐标。
以下有效,但相当乏味:
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
。
https://github.com/kriskowal/q#combination
例如
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
}));
我有一个尺寸和位置未知的 canvas。我想根据量角器中 canvas 的尺寸和位置模拟点击特定坐标。
以下有效,但相当乏味:
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
。
https://github.com/kriskowal/q#combination
例如
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
}));