【问题标题】:get static function to return async value获取静态函数以返回异步值
【发布时间】:2021-01-09 12:01:38
【问题描述】:

我想要一个静态 ES6 方法来简单地返回一个值而不是一个承诺。这就是我想要做的。

export default class Member {

  static existingMember() {
    var _existingMember;
    // DB.findExistingMember() -> returns a promise
    DB.findExistingMember().then(member => {
      _existingMember = member
    })
    return _existingMember
  }
}

// in mocha test

describe('some test', function () => {
  const member = Member.existingMember()

  it('has access to member', function() => {
     // I want member to be available here instead of having to do member.then()
    console.log(member)
    foo.someFunction(member)
    bar.someFunction(member)
  })
})

【问题讨论】:

  • 在您希望返回的变量_existingMember 的值设置为异步的情况下,您如何看待这可能?
  • @Mitya 在设置点then 内,值没有解析吗?
  • 是的——但是到那时你的静态方法已经完成了它的流程并返回了一个值为 undefined 的变量。直到稍后异步流程完成时才分配其值。
  • @Mitya 这正是我要解决的问题。有没有办法设置existingMember 以在没有async-await 的情况下从承诺内部返回值?
  • 不 - 这是一个矛盾。除非您使用生成器之类的东西做一些花哨的事情,否则函数只会同步返回一个值。否则,承诺(其中async-await 是一个抽象)或至少某种形式的回调是您唯一的途径。

标签: javascript node.js asynchronous mocha.js es6-promise


【解决方案1】:

您可以在 Member.existingMember 函数上使用 await 以将您的 member 用作普通变量

export default class Member {
    static existingMember() {
        return DB.findExistingMember();
    }
}

// in mocha test

describe('some test', function ()  {
    it('has access to member', async function () {
        const member = await Member.existingMember()
        console.log(member)
        foo.someFunction(member)
        bar.someFunction(member)
    })
})

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2016-05-22
    相关资源
    最近更新 更多