异步/等待:揭开 Promise 的神秘面纱
当开始使用异步/等待功能时,人们可能会遇到一个有趣的难题。看来异步函数总是返回 Promise 对象,导致在尝试直接控制台日志记录时出现混乱。
让我们更深入地研究这种现象并揭开其复杂性。每个异步函数都遵循 Promise 范式,返回一个封装操作结果的 Promise 对象。 wait 语句用作暂停函数执行的一种方法,直到 Promise 解析或拒绝。
虽然人们可能认为 wait 会自动解开 Promise,但事实并非如此。使用await只会导致函数等待并随后返回一个立即解析的Promise。然而,需要使用await或.then()显式解包Promise才能访问实际结果。
为了说明这一点,请考虑以下模拟异步请求的代码片段:
const getJSON = async () => { const request = () => new Promise((resolve, reject) => ( setTimeout(() => resolve({ foo: 'bar'}), 2000) )); const json = await request(); return json; };
如果尝试直接控制台记录结果,输出将是一个 Promise:
console.log(getJSON()); // returns Promise
但是,使用.then() 解开 Promise 会显示预期的 JSON 对象:
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
总之,异步函数总是返回 Promise,而 wait 只是暂停执行直到解决。要获得结果,需要使用await 或.then() 进行显式解包。这种机制确保了 Promise 模型的完整性,并防止在允许直接访问 Promise 结果时可能出现的不可预测的行为。
以上是为什么 Async/Await 函数总是返回 Promise?的详细内容。更多信息请关注PHP中文网其他相关文章!