我像这样调用getText()函数,然后尝试解析promise但稍后无法获取字符串值。
var textFromElement = someElement.getText().then(function(text){return text})
var splittedText = textFromElement.split(" ")
如何获取该文本供以后使用?
答案 0 :(得分:1)
你不明白的是javascript编译器如何处理promises。
这是编译器查看代码的方式;
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
答案 1 :(得分:0)
您的问题是您将.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);
});