在 async/await 上返回多个变量

Posted

技术标签:

【中文标题】在 async/await 上返回多个变量【英文标题】:Return multiple variables on async/await 【发布时间】:2018-02-15 19:50:39 【问题描述】:

我想知道是否有办法在不返回数组或 javascript 对象的情况下获取第二个 resolve 值 (test2)。

function testFunction() 
  return new Promise(function(resolve, reject) 
    resolve("test1", "test2");
  );


async function run() 
  var response = await testFunction();
  console.log(response); // test1


run();

【问题讨论】:

那么您希望response 变成什么? 我不明白你为什么要避免返回数据结构(一个对象),这就是 JavaScript 是如何构造来做这些事情的。 @MaciejSikora @Bergi,我想知道是否有内置功能,因为如果您在没有 async/await 的情况下构造函数调用,这两个变量都可用:testFunction().then(function(response1, response2) ...) @MarkNijboer 不,他们不是。至少不是标准的 ES6 承诺,它只有一个结果值。 【参考方案1】:

您只能传递一项。但是从ES6 开始,有一个很好的功能叫做Array Destructuring。

返回一个数组,您可以将属性分配留在后台。

function testFunction() 
    return new Promise(function(resolve, reject) 
  	       resolve([ "test1", "test2"] );
           );


async function run() 

  const [firstRes, secondRes] = await testFunction();
  
  console.log(firstRes, secondRes);



run();

【讨论】:

我刚刚发现 const response1, response2 = await testFunction(); 在 Node.js 8 中工作。它也被 util 模块中的 promisify 方法使用。所以没有必要返回一个数组:-) 作为对象返回对我不起作用。在上面的示例中,我得到 response1 和 response2 的“未定义”。但它在作为数组返回时有效。知道为什么吗? @马克

以上是关于在 async/await 上返回多个变量的主要内容,如果未能解决你的问题,请参考以下文章

异步编程初探async和await

Angular 数据绑定不适用于 async/await,但它适用于 Promise

将 Async/Await 响应保存在变量上

Generator与async/await与Generator的模拟

使用 babel js 将 async/await 编译为 es5

使用带有 async/await 的 ThreadStatic 变量