从异步函数返回值并将结果传递给另一个函数

时间:2018-02-07 19:05:52

标签: javascript

我正在使用一个类做一些数据库的东西。在这个例子中,我想重置数据并返回数据。

export default class Db {
  constructor () {
    this.connection = monk('localhost:27017/db')
  }

  async resetDB () {
    const Content = this.connection.get('content')
    await Content.remove({})
    await createContent()
    return Content.findOne({ title: 'article' })
  }
}

在我的测试中,我正在调用db.resetDB(),但我需要获取返回的值,因为我需要将ID作为参数传递。 但是我该怎么做?我认为我的问题是,这是异步的。

let id
describe('Test', () => {
  before(() => {
    db.resetDB(res => {
      id = res._id
      Article.open(id) // How do I get the ID?? I do get undefined here
      Article.title.waitForVisible()
    })
  })

  it('should do something', () => {
    // ...
  })
})

2 个答案:

答案 0 :(得分:1)

当调用异步函数时,它返回一个Promise。因此你可以在promise的.then()中得到返回值。你可以这样做,

let id
describe('Test', () => {
  before(() => {
    db.resetDB().then(res => {
      id = res._id
      Article.open(id) // How do I get the ID?? I do get undefined here
      Article.title.waitForVisible()
    })
  })

  it('should do something', () => {
    // ...
  })
})

答案 1 :(得分:0)

你可以让before函数等到所有异步调用都使用done()回调完成。

https://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support

你能做的是

let id
describe('Test', () => {
  before((done) => {
    db.resetDB().then(res => {
      id = res._id
      Article.open(id) // How do I get the ID?? I do get undefined here
      Article.title.waitForVisible()
      done()
    })
  })

  it('should do something', () => {
    // ...
  })
})