Promise 是 JavaScript 中异步编程的一个基本方面。当谈到 async/await 时,重要的是要揭开异步函数总是返回 Promise 的概念。
await 关键字放置在返回 Promise 的函数调用之前,会暂停当前函数的执行,直到Promise 要么被解决,要么被拒绝。然而,这次暂停并没有解除承诺。 Promise 的结果仍然封装在返回的 Promise 对象中。
为了说明这一点,请考虑以下模拟异步请求的代码:
const getJSON = async () => { const request = () => new Promise((resolve, reject) => ( setTimeout(() => resolve({ foo: 'bar' }), 2000) )); const json = await request(); return json; };
调用 getJSON() 时,它返回a Promise,因为await语句只是暂停执行直到请求完成:
console.log(getJSON()); // returns Promise
相反,当链接.then(),Promise的结果终于暴露了:
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
为什么不能用console.log(getJSON())绕过Promise包装?这是 Promise 的基本属性。 Promise 代表异步操作,在解决或拒绝之前,它们的结果是未知的。有意禁止对结果的外部访问,以确保 Promise 仍然是结果的唯一中介。
请记住,async/await 通过在遇到 Promise 时暂停执行来使使用 Promise 变得更加方便,但它并没有无需解开 Promise 来访问其结果。
以上是JavaScript 中的 async/await 是否总是返回 Promise,为什么?的详细内容。更多信息请关注PHP中文网其他相关文章!