小编Riw*_*iwa的帖子

将临时变量分配给变量时异步函数的不同行为

为什么以下情况会出现不同的结果?第一个示例工作正常,返回一个包含三个元素的数组["qwe", "rty", "asd"]。第二个示例仅返回最后一个元素["asd"]。请解释一下它是如何工作的?为什么会发生这种行为?

在第一个示例中,通过中间变量进行工作awaitResult

class XXX {
  constructor() {
    this.storage = {1: ['qwe'], 2: ['rty'], 3: ['asd']}
  }

  async getValue(key) {
    return this.storage[key];
  }

  async logValues() {
    let keys = [1, 2, 3]
    let values = []

    // ----- First version -----

    await Promise.all(
      keys.map(
        async key => {
          let awaitResult = await this.getValue(key)
          values = values.concat(awaitResult)
        }
      )
    );

    console.log(values)
  }
}

let xxx = new XXX()
xxx.logValues()
Run Code Online (Sandbox Code Playgroud)

在第二个例子中,没有awaitResult.

javascript arrays variables promise async-await

1
推荐指数
1
解决办法
821
查看次数

标签 统计

arrays ×1

async-await ×1

javascript ×1

promise ×1

variables ×1