在对象文字中使用await时程序如何运行?

如何解决在对象文字中使用await时程序如何运行?

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

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
    }
}

谢谢!

解决方法

谢谢您叫我澄清您的问题(!)。我会尽力解释您的实际要求。我很想简单地删除这个答案。它可能有用,也可能没有帮助!

如果您伪造了“ FETCH REQUEST”,则使用async方法,该方法仅在启动时以及在(异步)解析之前就打印到控制台,您可以很清楚地看到它将完成p1之前的p2。多次运行它可以确认这一点,因为对p1p2的调用不会交织。

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",Math.random() * 1000)
   );
}


foo();

关于对象将包含fetch方法的返回值的内容是:

解析为Response对象的承诺。

,

看着https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Promise是创建Promise时不一定知道的值的代理。它允许您将处理程序与异步操作的最终成功值或失败原因相关联。这样一来,异步方法就可以像同步方法一样返回值:与立即返回最终值不同,异步方法返回了在将来某个时刻提供值的承诺。

在两个示例中,

p1和p2返回一个Promise。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?