我正在使用以下代码使用Node.js保存/更新记录:
router.route('/SaveData').post(VerifyToken, function(req, res) {
new sql.ConnectionPool(conn).connect().then(pool=>{
pool.request()
.input('userid', sql.NVarChar(50), req.body.userid)
.execute("USP_Save1").then(function(ret) {
if (req.body.array1 != undefined) {
req.body.array1.forEach(function(p) {
pool.request().input('lng_Distance', sql.Int, p.lng_DistanceFromWinch).execute("USP_Save2")
});
}
});
return pool.request()
.input('AssetID', sql.VarChar, req.body.AssetNumber)
.execute("USP_GetAllUpdatedRecords")
}).then(result=>{
let rows = result
res.setHeader('Access-Control-Allow-Origin', '*')
res.header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token , Authorization');
res.status(200).json(rows);
sql.close();
}).catch(err=>{
console.log(err);
res.status(500).send({
message: "${err}",
err
})
sql.close();
});
});
问题:在上面的代码中,您可以看到我正在保存标头和array1。但是在回调中,我在数据库中更新记录之前得到结果。我如何在这里申请承诺?
工作副本
添加此内容,以便我们可以查看哪些有效,哪些无效。
我已将SELECT查询移至退出req.body.array1.forEach()循环后直接执行。这意味着,如果对IF语句求值,它只会获取更新的更新。要选择是否有更新,请将其移动到if之后,看看是否可行。
router.route('/SaveData').post(VerifyToken, function(req, res) {
new sql.ConnectionPool(conn).connect().then(pool=>{
pool.request()
.input('userid', sql.NVarChar(50), req.body.userid)
.execute("USP_Save1").then(function(ret) {
if (req.body.array1 != undefined) {
req.body.array1.forEach(function(p) {
pool.request().input('lng_Distance', sql.Int, p.lng_DistanceFromWinch).execute("USP_Save2")
});
return pool.request()
.input('AssetID', sql.VarChar, req.body.AssetNumber)
.execute("USP_GetAllUpdatedRecords")
}
});
}).then(result=>{
let rows = result
res.setHeader('Access-Control-Allow-Origin', '*')
res.header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token , Authorization');
res.status(200).json(rows);
sql.close();
}).catch(err=>{
console.log(err);
res.status(500).send({
message: "${err}",
err
})
sql.close();
});
});