当我在对象字面量中使用 await 时程序如何运行?

当我写一个返回对象的函数,但是对象的每一个值都是通过 resolving promises 构造的,最后我会得到什么?我的意思是,对象值的类型是什么?


async foo() {

    return {

        p1: await fetch('http://dummy.restapiexample.com/api/v1/employees') // FETCH REQUEST,

        p2: await fetch('http://dummy.restapiexample.com/api/v1/employees') // FETCH REQUEST

    }

}

对于这样的流程,将在 ?p2之后解决p1?此代码是否与以下示例一样工作:


async foo() {

    const p1 = await fetch('http://dummy.restapiexample.com/api/v1/employees') // FETCH REQUEST

    const p2 = await fetch('http://dummy.restapiexample.com/api/v1/employees') // FETCH REQUEST

    return {

        p1,

        p2

    }

}

谢谢你!


肥皂起泡泡
浏览 76回答 2
2回答

犯罪嫌疑人X

要求您澄清您的问题(!)。我会尽力解释您实际要问的内容。我很想简单地删除这个答案。它可能有用也可能没有用!如果你伪造“FETCH REQUEST”是什么,使用一种async在它启动时简单地打印到控制台的方法,就在它(异步)解析之前,你可以很清楚地看到它会在p1开始之前完成p2。运行它几次可以确认这是对p1和p2不交错的调用。async function foo() {    return {        p1: await randomAsyncMethod("p1"),        p2: await randomAsyncMethod("p2")    }}async function randomAsyncMethod(which){   console.log("starting",which);   return new Promise( resolve =>        setTimeout( () => {          console.log("resolving",which);          resolve();      }, Math.random() * 1000)   );}foo();现在将其更改为第二个示例,您可以看到行为基本相同。async function foo() {    var p1 = await randomAsyncMethod("p1");    var p2 = await randomAsyncMethod("p2");    return {        p1,        p2     }}async function randomAsyncMethod(which){   console.log("starting",which);   return new Promise( resolve =>        setTimeout( () => {          console.log("resolving",which);          resolve();      }, Math.random() * 1000)   );}foo();至于你的对象会包含什么fetch方法的返回值是:解析为Response对象的 Promise 。

慕尼黑8549860

查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PromisePromise 是创建 Promise 时不一定知道的值的代理。它允许您将处理程序与异步操作的最终成功值或失败原因相关联。这让异步方法像同步方法一样返回值:异步方法不是立即返回最终值,而是返回一个在未来某个时间点提供值的承诺。p1 和 p2 在两个示例中都返回一个承诺。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript