async/await永远returns承诺
async/await always returns promise
我正在尝试 async/await 功能。我有这样的代码模仿一个请求:
const getJSON = async () => {
const request = () => new Promise((resolve, reject) => (
setTimeout(() => resolve({ foo: 'bar'}), 2000)
));
const json = await request();
return json;
}
当我这样使用代码时
console.log(getJSON()); // returns Promise
它returns一个承诺
但是当我调用这行代码时
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
它按预期打印 json
是否可以只使用像 console.log(getJSON())
这样的代码?我不明白什么?
每个 async
函数 return 都是一个 Promise
对象。 await
语句对 Promise
进行操作,等待 Promise
resolve
或 reject
。
所以不,你不能直接对异步函数的结果执行 console.log
,即使你使用 await
。使用 await
将使您的函数等待,然后 return 一个 Promise
立即解析,但它不会为您打开 Promise
。您仍然需要使用 await
或 .then()
解包由 async
函数编辑的 Promise
return。
当您使用 .then()
而不是直接 console.log
ging 时,.then()
方法使 Promise 的结果对您可用。但是您无法从 Promise 之外获得 Promise
的结果。这是使用 Promises 模型的一部分。
Return value of an async function will always be an AsyncFunction Object,调用时会 return 一个 Promise
。您无法更改 return 类型。 async/await
的要点是在异步函数内轻松等待其他异步进程完成。
用 async
定义的函数总是 return 是 Promise
。如果您 return 任何其他不是 Promise
的值,它将隐式包装在 Promise
中。 语句 const json = await request();
展开 [=11] =] return由 request()
编辑为普通对象 { foo: 'bar' }
。然后在从 getJSON
编辑 return 之前将其包装在 Promise
中,因此当您调用 getJSON()
时最终得到的是 Promise
。因此,要解包它,您可以像之前那样调用 getJSON().then()
或调用 await getJSON()
来获取已解析的值。
const getResOrErr = () => {
const callAsyncCodeHere = async () => {
const request = () =>
new Promise((resolve, reject) =>
setTimeout(() => resolve({ foo: "bar" }), 2000)
);
const json = await request();
return json;
};
return callAsyncCodeHere()
.then(console.log)
.catch(console.log);
};
getResOrErr();
试试这个。您可以在主函数中创建一个函数,然后将承诺代码放入该函数中。在那里调用它,当你得到响应或错误时 return 它。
我正在尝试 async/await 功能。我有这样的代码模仿一个请求:
const getJSON = async () => {
const request = () => new Promise((resolve, reject) => (
setTimeout(() => resolve({ foo: 'bar'}), 2000)
));
const json = await request();
return json;
}
当我这样使用代码时
console.log(getJSON()); // returns Promise
它returns一个承诺
但是当我调用这行代码时
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
它按预期打印 json
是否可以只使用像 console.log(getJSON())
这样的代码?我不明白什么?
每个 async
函数 return 都是一个 Promise
对象。 await
语句对 Promise
进行操作,等待 Promise
resolve
或 reject
。
所以不,你不能直接对异步函数的结果执行 console.log
,即使你使用 await
。使用 await
将使您的函数等待,然后 return 一个 Promise
立即解析,但它不会为您打开 Promise
。您仍然需要使用 await
或 .then()
解包由 async
函数编辑的 Promise
return。
当您使用 .then()
而不是直接 console.log
ging 时,.then()
方法使 Promise 的结果对您可用。但是您无法从 Promise 之外获得 Promise
的结果。这是使用 Promises 模型的一部分。
Return value of an async function will always be an AsyncFunction Object,调用时会 return 一个 Promise
。您无法更改 return 类型。 async/await
的要点是在异步函数内轻松等待其他异步进程完成。
用 async
定义的函数总是 return 是 Promise
。如果您 return 任何其他不是 Promise
的值,它将隐式包装在 Promise
中。 语句 const json = await request();
展开 [=11] =] return由 request()
编辑为普通对象 { foo: 'bar' }
。然后在从 getJSON
编辑 return 之前将其包装在 Promise
中,因此当您调用 getJSON()
时最终得到的是 Promise
。因此,要解包它,您可以像之前那样调用 getJSON().then()
或调用 await getJSON()
来获取已解析的值。
const getResOrErr = () => {
const callAsyncCodeHere = async () => {
const request = () =>
new Promise((resolve, reject) =>
setTimeout(() => resolve({ foo: "bar" }), 2000)
);
const json = await request();
return json;
};
return callAsyncCodeHere()
.then(console.log)
.catch(console.log);
};
getResOrErr();
试试这个。您可以在主函数中创建一个函数,然后将承诺代码放入该函数中。在那里调用它,当你得到响应或错误时 return 它。