Javascript nodejsapi不';得不到结果
我是Nodejs的初学者。 我正在尝试使用async/await创建api:Javascript nodejsapi不';得不到结果,javascript,node.js,Javascript,Node.js,我是Nodejs的初学者。 我正在尝试使用async/await创建api: getAllTasks: function (callback) { return db.query("Select * from tasks", callback); }, function asyncGetAllTask(){ return new Promise((resolve,reject)=>{ resolve (Task.getAllTasks()); })
getAllTasks: function (callback) {
return db.query("Select * from tasks", callback);
},
function asyncGetAllTask(){
return new Promise((resolve,reject)=>{
resolve (Task.getAllTasks());
})
}
router.get('/:id?', async function (req, res) {
if(req.params.id){
await asyncGetTaskByID(req)
.catch(err=>{
res.send(400, {status:400, message: 'bad request', type:'client errors'});
})
.then(rows=>{
res.json(rows)
})
}
else {
await asyncGetAllTask()
.catch(err=>{
res.json(err);
})
.then(rows=>{
res.json(rows);
})
}
});
我试图从数据库中获取所有“任务”(我使用的是mysql)。但是,我不获取任务行。相反,当我使用postman的get方法时,我得到了以下结果:
{
"domain": null,
"_events": {},
"_eventsCount": 0,
"_callSite": {},
"_ended": false,
"_idleNext": null,
"_idlePrev": null,
"_idleStart": null,
"_idleTimeout": -1,
"_repeat": null,
"sql": "Select * from tasks",
"typeCast": true,
"nestTables": false,
"_resultSet": null,
"_results": [],
"_fields": [],
"_index": 0,
"_loadError": null
}
我错过什么了吗?我不明白为什么我得到了错误的结果。
对不起我的英语。
谢谢将
wait
关键字与promise接口和处理程序(即.catch()
和.then()
)组合在这里看起来是正确的
如果您想使用wait
,您应该按照以下思路重新构造代码(注意使用try
和catch
,以实现错误处理所需的类似catch的行为):
此外,您可能需要将方法asyncGetAllTask()
更新为以下内容:
function asyncGetAllTask(){
return new Promise((resolve,reject)=>{
// The resolve callback should probably be passed to getAllTasks
// as per your defintion of Task.getAllTasks
Task.getAllTasks((error, rows) => {
if(error) {
reject(error);
} else {
resolve(rows);
}
});
})
}
您的
getAllTasks()
希望向其传递回调,但在调用Task.getAllTasks()
时却没有传递回调。那是行不通的。用承诺来包装它根本没有帮助。而且,您只能在承诺上使用wait
,这样您等待的东西必须是承诺,否则它不会等待任何东西。谢谢您,但我仍然会得到上面相同的结果,而不是这个:[{“taskid”:1,“taskname”:“task a”,“dateCreated”:“2018-07-10T17:00:00.000Z”,“description”:“description a”},{“taskid”:2,“taskname”:“task b”,“dateCreated”:“2018-07-10T17:00:00.000Z”,“description”:“description b”},请参阅我的更新以及asyncGetAllTask()
-这有帮助吗?
function asyncGetAllTask(){
return new Promise((resolve,reject)=>{
// The resolve callback should probably be passed to getAllTasks
// as per your defintion of Task.getAllTasks
Task.getAllTasks((error, rows) => {
if(error) {
reject(error);
} else {
resolve(rows);
}
});
})
}