繁体   English   中英

量角器用getText()进行诺言解析

[英]Protractor promise resolution with getText()

我这样调用getText()函数,然后尝试解析Promise,但以后无法获取字符串值。

var textFromElement = someElement.getText().then(function(text){return text})
var splittedText = textFromElement.split(" ")

如何获取文本以备后用?

您不了解的是javascript编译器如何处理promise。

这就是编译器查看代码的方式。

var textFromElement = someElement.getText().then(function(text){return text})
var splittedText = textFromElement.split(" ")

1-所有变量都在函数作用域的顶部创建,无论您在何处分配变量。

var textFromElement; (= undefined)
var splittedText; (= undefined)

2-对每一行进行最少的工作,然后移至下一行。

testFromElement = {promise element object};
splittedText = {promise element object}.split(" "); (= undefined)//This what you don't want.

3-从顶部开始,在未解析的行上执行最少的工作。

testFromElement = {promise getText object};

4-从顶部开始,在未解决的行上执行最少的工作。

testFromElement = "text text";

简而言之,它在您需要之前将splittedText分配了三步。

好例子:

var splittedText;
it("should get split text", function(done) {
  someElement.getText().then(function(textFromElement){
    splittedText = textFromElement.split(" ");
    done();
  })
})

1-所有变量都在函数作用域的顶部创建,无论您在何处分配变量。

var splittedText; (= undefined)

2-仅在此函数内完成工作,直到调用done()

it("should get split text", function(done) {

3-对每一行进行最少的工作,然后移至下一行。

someElement = {promise element object};

4-从函数的顶部开始,在未解析的行上执行的工作量最少。

someElement.getText() = {promise getText object};

5-从函数的顶部开始,在未解析的行上执行的工作量最少。

textFromElement = "text text";
splittedText = textFromElement.split(" "); (["text","text"]);
done();  //the compiler can now to work outside this function

您的问题是,您正在为变量分配.then()方法的分辨率,而不是为其提供参数的回调。

总而言之,量角器/茉莉都带有异步测试机制。

在这里,您获得了ES6示例。

it('some description', (done) => {
    someElement.getText().then(text => {
        var splittedText = text.split(" ");
        done();
    });
});

和ES5:

it('some description', function(done) => {
    someElement.getText().then(function(text){
        var splittedText = text.split(" ");
    }).finally(done);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM