首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想在Object中返回异步函数的值

我想在Object中返回异步函数的值
EN

Stack Overflow用户
提问于 2019-04-09 20:47:26
回答 3查看 2.2K关注 0票数 0

我有一个异步功能。我想创建一个对象,对象中属性的值是异步函数的返回值。但现在该属性的值是一个对象承诺

我的代码是这样的:

代码语言:javascript
运行
复制
const promise1 = new Promise(function(resolve, reject) {
  resolve('myvalue');
});
const a = async () => {
  var b = await promise1
  return b;
}
const newobj = {'a': a()};

console.log(newobj)

// the result is : {a: Promise {<resolved>: "myvalue"}} but i want {a: "myvalue"}

EN

回答 3

Stack Overflow用户

发布于 2019-04-09 20:53:23

代码的问题是将return of a (这是一个异步函数,因此它将返回一个Promise)赋给newObj.a

异步函数可以包含等待表达式,该表达式暂停异步函数的执行并等待传递的Promise的解析,然后恢复异步函数的执行并返回已解析的值。你可以阅读更多关于它的here

请记住,

关键字仅在异步函数内有效。如果你在异步函数体之外使用它,你会得到一个SyntaxError。

方法1

代码语言:javascript
运行
复制
const promise1 = new Promise(function(resolve, reject) {
  resolve('myvalue');
});
const a = async() => {
  var b = await promise1
  return b;
}

const printData = async() => {
  const newobj = {
    'a': await a()
  };
  console.log(newobj)
}

printData()

编辑:应johnson andriatiana的要求,我已将代码包装在异步IIFE函数中。

方法2:

代码语言:javascript
运行
复制
(async() => {
  const promise1 = new Promise(function(resolve, reject) {
    resolve('myvalue');
  });
  const a = async() => {
    var b = await promise1
    return b;
  }
  const newobj = {
    'a': await a()
  };

  console.log(newobj)
})();

票数 1
EN

Stack Overflow用户

发布于 2019-04-09 20:54:03

这里的问题是,运行()将返回一个 promise ,因此,为了分配promise的结果,您应该等待它首先完成。

以下是一种可能的方法:

代码语言:javascript
运行
复制
const promise1 = new Promise(function(resolve, reject) {
  resolve('myvalue');
});
const a = async () => {
  var b = await promise1
  return b;
}
const run = async () => {
  const newobj = {'a': await a()};
  console.log(newobj);
}

run()

票数 1
EN

Stack Overflow用户

发布于 2019-04-09 20:51:35

你需要await你的异步函数。因此,作为替代

代码语言:javascript
运行
复制
const newobj = {'a': a()};

代码语言:javascript
运行
复制
const newobj = {'a': await a()};

a()返回一个promise,await a()是(将是)该promise返回的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55593285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档