【发布时间】:2017-11-18 17:44:06
【问题描述】:
我有两个运行承诺的 mysql 查询。
第一个是更新 mysql 表上的信息,然后解决问题并调用下一个 mysql 查询。问题是,当它调用下一个 mysql 查询时,promise 返回 UNDEFINED,我不知道为什么。当我在我的节点 js 服务器发布请求中 console.log 它时,它给出了未定义的。我在代码中记录了哪些区域存在问题。
UpdateUserPath = (data) => new Promise((resolve,reject)=>{
data.UPDATE_DT = getDateTime();
db.query('UPDATE path UPDATE_DT = ? where Owner = ?',
[data.UPDATE_DT, data.Owner], function(err,results,fields){
if(err){
reject('Could not update user path');
}else{
if(results.affectedRows > 0){
data.ID = null;
data.UPDATE_DT = null;
// The problem is here, when this gets resolved it calls the other function SaveUserPath
resolve(saveUserPath(data));
}else{
reject('Could not update user path');
}
}
});
});
saveUserPath = (data) => new Promise((resolve, reject) => {
db.query('INSERT INTO path SET ?', data, function (error, results, fields) {
if (error) {
reject('Could not insert path');
}else{
var Id = results.insertId;
db.query('UPDATE path SET ORIG_ID = ? where ID = ?',[Id, Id], function(err,results,fields){
if(err){
reject('Could not insert row to path table - saveuserpath');
}else{
if(results.affectedRows > 0){
// THIS INFORMATION HERE IS UNDEFINED
return resolve(results[0]);
}else{
reject('Could not update path');
}
}
});
}
});
});
在服务器中它被这样调用。
getUserPath(req.session.userid).then((path_data)=>{
path_data.status = 1;
UpdateUserPath(path_data).then((result)=>{
console.log(result); // THIS IS UNDEFINED
});
});
我想知道resolve(saveUserPath(data)); 是否是调用不在服务器外部的另一个承诺的正确方法。
我正考虑这样做。
UpdateUserPath(path_data).then((result)=>{
saveUserPath(result).then((result_save) => {
console.log(result_save); // THIS MIGHT WORK
});
});
但是为什么正常的方式是错误的。
【问题讨论】:
-
在
saveUserPath()中,第二个查询的console.log(results)显示什么? -
这是一个类示例,说明您应该如何直接为数据库使用 Promisified 接口,而不是尝试在手动创建的 Promise 中包装多个嵌套回调。这段代码比它需要的更容易出错和冗长。
-
@jfriend00 正常工作。
-
@jfriend00 任何修复建议,我不太清楚你的意思。
-
// THIS INFORMATION HERE IS UNDEFINED- 所以,如果你console.log(results[0])在那一行,你会得到undefined?