Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS异步编程中如何处理对象?删除功能的影响_Javascript_Promise_Async Await - Fatal编程技术网

Javascript 在JS异步编程中如何处理对象?删除功能的影响

Javascript 在JS异步编程中如何处理对象?删除功能的影响,javascript,promise,async-await,Javascript,Promise,Async Await,我对JS有问题,希望有人能帮我 我的目标是:创建一个包含api多个端点数据的对象 我的问题:当我在console.log中记录整个对象时,Promise中的函数生成的所有属性都将丢失。当我试图通过属性直接访问它时,它会工作。查看浏览器输出以更好地理解 这怎么行得通呢? var tickets = (await app.$api.get('/ticket')).data.result; var promisses = []; for (const key in tickets) {

我对JS有问题,希望有人能帮我

我的目标是:创建一个包含api多个端点数据的对象

我的问题:当我在console.log中记录整个对象时,Promise中的函数生成的所有属性都将丢失。当我试图通过属性直接访问它时,它会工作。查看浏览器输出以更好地理解

这怎么行得通呢?

  var tickets = (await app.$api.get('/ticket')).data.result;
  var promisses = [];
  for (const key in tickets) {
    promisses.push(Promise.all([
        app.$api.get(`ticket/${tickets[key].id}/file`).then(response => {tickets[key].files = response.data.result; console.log("X")}),
        app.$api.get(`ticket/${tickets[key].id}/field`).then(response => {tickets[key].fields = response.data.result}),
        app.$api.get(`ticket/${tickets[key].id}/group`).then(response => {tickets[key].groups = response.data.result}),
        app.$api.get(`ticket/${tickets[key].id}/user`).then(response => {tickets[key].users = response.data.result}),
        app.$api.get(`ticket/${tickets[key].id}/work`).then(response => {tickets[key].work = response.data.result}),
        app.$api.get(`ticket/${tickets[key].id}/sign`).then(response => {tickets[key].signs = response.data.result}),
      ]));
  }
  await Promise.all(promisses);
  console.log(tickets[0]);
  console.log(tickets[0].fields);


编辑:所有属性,不仅字段属性受到影响。

也许我找到了解决方案,但没有找到答案

在函数中,在代码段之后执行,使用删除票据。字段。 delete-function在执行之前会影响执行吗

以下代码段正在运行:原始代码包含删除函数

检查此stackoverflow.com/a/62548305/9695286。在console.log中,它记录对象。但它仅在展开对象值时检索和显示所有属性卡兰


我将把Karan的回答作为一个解决方案转发。

为什么要在数组中推一个promise all,然后在promise all中推一个promise all?以使用js的异步功能并“并行”执行这些请求而不是按特殊顺序,在我下一个请求完成之前,等待请求完成。所以你试图实现一个嵌套的承诺。好吗?我想我知道,你的意思。。。使用嵌套的期票是没有用的。。。你也可以把每一个承诺都变成承诺。你能解释一下我在控制台屏幕截图上看到的是什么吗?检查这个。在
console.log
中,它
记录
对象
。但当您展开对象值时,它将仅检索并显示所有
属性。
function validateTicket(ticket) {
  if (ticket.fields) {
    ticket.fields.forEach(validateTicketField);
    // delete ticket.fields;
  } else throw new Error('MISSING_PARAMETER(fields)');
  if (ticket.files) {
    ticket.files.forEach(validateTicketFile);
    // delete ticket.files;
  } else throw new Error('MISSING_PARAMETER(files)');
  if (ticket.groups) {
    ticket.groups.forEach(validateTicketGroup);
    // delete ticket.groups;
  } else throw new Error('MISSING_PARAMETER(groups)');
  if (ticket.users) {
    ticket.users.forEach(validateTicketUser);
    // delete ticket.users;
  } else throw new Error('MISSING_PARAMETER(users)');
  if (ticket.work) {
    ticket.work.forEach(validateTicketWork);
    // delete ticket.work;
  } else throw new Error('MISSING_PARAMETER(work)');
  if (ticket.signs) {
    ticket.signs.forEach(validateTicketSign);
    // delete ticket.signs;
  } else throw new Error('MISSING_PARAMETER(signs)');
  // TODO: check Ticket Headdata
}
  var tickets = (await app.$api.get('/ticket')).data.result;
  var promisses = [];
  for (const key in tickets) {
    promisses.push(...[
        app.$api.get(`ticket/${tickets[key].id}/file`).then(response => {tickets[key].files = response.data.result; console.log("X")}),
        app.$api.get(`ticket/${tickets[key].id}/field`).then(response => {tickets[key].fields = response.data.result}),
        app.$api.get(`ticket/${tickets[key].id}/group`).then(response => {tickets[key].groups = response.data.result}),
        app.$api.get(`ticket/${tickets[key].id}/user`).then(response => {tickets[key].users = response.data.result}),
        app.$api.get(`ticket/${tickets[key].id}/work`).then(response => {tickets[key].work = response.data.result}),
        app.$api.get(`ticket/${tickets[key].id}/sign`).then(response => {tickets[key].signs = response.data.result}),
      ]);
  }
  await Promise.all(promisses);
  console.log(tickets[0]);
  console.log(tickets[0].fields);
  tickets.forEach(validateTicket);