javascript - async/await 总是返回未定义

标签 javascript typescript ecmascript-6 promise

在我的 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/

相关文章:

javascript无法在复选框中获取变量

javascript - html <a> 激活点击输入按下

javascript - 用另一个延迟对象解析jquery延迟对象

Javascript:从嵌套函数调用外部方法

javascript - 如何同时使用不同的 eslint 配置来 lint JS 和 TS 文件?

javascript - ES6 Map 中的 Array.map 相当于什么?

javascript - 将 Promise 的返回值传递给许多函数的最佳方法

typescript - 是否可以在 TypeScript 的类型空间中提供命名的剩余参数?

javascript - Meteor - createContainer 未渲染到 React

javascript - 过滤器不返回索引值javascript