在我的 Protractor 应用程序中,我有以下方法,该方法应该返回 bool 值,具体取决于它是否找到元素。
async getTheValueOfEntery(entery: string) {
var value = await element(by.xpath(entery))
.isPresent().then((isExist) => {
isExist;
});
return value;
}
但是,问题是,它总是返回 undefined
,尽管我确信它应该返回 true
。
那么,我的方法有什么问题吗?
<小时/>更新:
确实,我需要有一个调用链,胖函数,所以我的函数的最完整版本如下:
async getTheValueOfEntery(entery: string) {
var value = await element(by.xpath(entery))
.isPresent().then((isExist, entery: string) => {
isExist ? element(by.xpath(entery)).getText() : 0;
});
return value;
}
但是,我无法将 entery:string
传递给第二个 lambda。
最佳答案
你的箭头函数没有返回任何内容,所以它的结果是 undefined
。如果你写:
.isPresent().then((isExist, entery: string) => {
isExist ? element(by.xpath(entery)).getText() : 0;
});
那么就好像你会写:
.isPresent().then(function (isExist, entery: string) {
isExist ? element(by.xpath(entery)).getText() : 0;
});
所以你需要添加一个return
:
.isPresent().then((isExist, entery: string) => {
return isExist ? element(by.xpath(entery)).getText() : 0;
});
或者删除 {}
:
.isPresent().then((isExist, entery: string) => isExist ? element(by.xpath(entery)).getText() : 0);
如果你不对value
做任何事情变量除了返回它之外,那么你不需要使用 await
。你可以这样写:
async getTheValueOfEntery(entery: string) {
return element(by.xpath(entery))
.isPresent().then((isExist, entery: string) => {
isExist ? element(by.xpath(entery)).getText() : 0;
});
}
async
那么理论上也不需要,但这没有坏处,并且会表明该函数将始终返回一个 Promise。
关于javascript - async/await 总是返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54502201/