我有一个异步功能。我想创建一个对象,对象中属性的值是异步函数的返回值。但现在该属性的值是一个对象承诺
我的代码是这样的:
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"}
发布于 2019-04-09 20:53:23
代码的问题是将return of a
(这是一个异步函数,因此它将返回一个Promise
)赋给newObj.a
异步函数可以包含等待表达式,该表达式暂停异步函数的执行并等待传递的Promise的解析,然后恢复异步函数的执行并返回已解析的值。你可以阅读更多关于它的here
请记住,
关键字仅在异步函数内有效。如果你在异步函数体之外使用它,你会得到一个SyntaxError。
方法1
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:
(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)
})();
发布于 2019-04-09 20:54:03
这里的问题是,运行()将返回一个 promise ,因此,为了分配promise的结果,您应该等待它首先完成。
以下是一种可能的方法:
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()
发布于 2019-04-09 20:51:35
你需要await
你的异步函数。因此,作为替代
const newobj = {'a': a()};
做
const newobj = {'a': await a()};
a()
返回一个promise,await a()
是(将是)该promise返回的值。
https://stackoverflow.com/questions/55593285
复制相似问题