Как решить проблему Promise {<pending>}? - PullRequest
0 голосов
/ 09 октября 2018

Вот мой код:

router.get("test", async ctx => {
  let q = await ctx.db
    .execute(`SELECT w.create_time as create_time,w.camera_id,w.status,
  w.problem_type_id,w.repair_user_id,w.no as no,wp.pic_url
  FROM work_flow w
  left OUTER
  JOIN work_flow_pic wp ON w.no=wp.flow_id`);
  let data = q.map(item => {
    let url = ctx.db.execute(
      `select * from work_flow_pic where flow_id=${item.no}`
    );
    return {
      create_time: item.create_time,
      no: item.no,
      url: url.then(function(result) {
        result;
      })
    };
  });
  console.log(data);
  let retstr = `[{"ret":"0"}]`;
  await ctx.render("interface_ret", {
    retstr
  });
});

Когда я запускаю код, я получаю такой вывод:

    [ { create_time: 2018-10-09T02:47:54.000Z,
    no: '153905327352986',
    url: Promise { <pending> } },
  { create_time: 2018-10-09T02:47:54.000Z,
    no: '153905327352986',
    url: Promise { <pending> } },
  { create_time: 2018-10-09T08:51:33.000Z,
    no: '153905327352987',
    url: Promise { <pending> } } ]

Я не знаю, как его решить

Ответы [ 3 ]

0 голосов
/ 14 октября 2018

введите описание изображения здесь

Я наконец выясняю проблему.

0 голосов
/ 22 апреля 2019
let ps = q.map(async item => {
  let url = await ctx.db.execute(
    `select * from work_flow_pic where flow_id=${item.no}`
  );
  return {
    create_time: item.create_time,
    no: item.no,
    url: url
  };
});

const data = await Promise.all(ps);

использовать карту, чтобы создать массив обещаний, подождать, когда все выполнено => все данные (массив)

0 голосов
/ 09 октября 2018

Если вы хотите дождаться разрешения обещания и получить его возвращаемое значение, вы можете использовать await, как вы делали выше:

let q = await ctx.db.execute(`SELECT w.create_time as 
     create_time,w.camera_id,w.status,
     w.problem_type_id,w.repair_user_id,w.no as no,wp.pic_url
     FROM work_flow w left OUTER JOIN work_flow_pic wp ON w.no=wp.flow_id`);//get q from table
let data = q.map(item => {
let url = await ctx.db.execute(`select * from work_flow_pic where 
flow_id=${item.no}`); //get url from q
return {
  create_time: item.create_time,
  no: item.no,
  url: url
  })
}
});
  console.log(data);
...