Node.js 如何解决承诺{<;待定>;}问题?
这是我的密码:Node.js 如何解决承诺{<;待定>;}问题?,node.js,koa2,Node.js,Koa2,这是我的密码: 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_pi
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> } } ]
创建时间:2018-10-09T02:47:54.000Z,
编号:“153905327352986”,
url:Promise{},
{创建时间:2018-10-09T02:47:54.000Z,
编号:“153905327352986”,
url:Promise{},
{创建时间:2018-10-09T08:51:33.000Z,
编号:“153905327352987”,
url:Promise{}]
我不知道如何解决它当您希望等待承诺解决并获得其返回值时,您可以使用上面所述的
等待
:
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);
我终于解决了这个问题
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);
使用map创建promise数组,wait all done=>all data(array)谢谢我尝试了你的方法,但它仍然得到这样一个错误“let url=wait ctx.db.execute(`select*from work\u flow\u pic其中^^^^^^ SyntaxError:wait仅在异步函数中有效”你必须在一个异步环境中。就像你以前做的那样。在等待之前如何编写异步环境?现在是你的问题:
router.get(“test”,async ctx=>{
..});`但是任何前缀为async的函数都可以工作。你的意思是我不能再次使用async?因为我已经使用了router.get(“test”,async ctx=>{…})