0
我是新來的異步編程。我知道這個問題已被多次詢問,但我無法理解和解決這個問題,我使用nodeJs和MsSql模塊連接到Sql Server。如何執行數組中的所有對象,然後向客戶端發送響應?
我在寫一個nodejs應用程序,它接受輸入參數並在執行每個對象的foreach循環中運行。我的問題是,一旦數組中的所有對象都被執行後,我怎樣才能將響應發送回客戶端。現在我正在執行每個對象後發回響應。
我的第二個問題是異步編程是否會導致數據庫中的死鎖?下面
代碼:
**Post call code:**
exports.add = function (req, resp, reqbody) {
try {
if (!reqbody)
throw new Error(" Dude, No data !! Send Some Data");
var data = JSON.parse(reqbody);
if (data) {
data.forEach(function (obj) {
var sql = "USE " + obj.a + " EXEC [dbo].[SP] " + obj.c+ ", " + obj.b+ ""
db.executeSql(sql, function (data, err) {
if (err) {
responses.show500(req, resp, err)
}
else {
responses.send200(req, resp)
}
});
});
}
else {
throw new Error("Input not valid");
}
}
catch (ex) {
console.log(ex);
responses.show500(req, resp, ex);
}
};
DB調用代碼:
var db = require("../core/db");
var responses = require("../core/responses");
exports.executeSql = function (sql, callback) {
var conn = new sqldb.Connection(settings.dbconfig);
conn.connect()
.then(function() {
var req = new sqldb.Request(conn);
req.query(sql)
.then(function (recordset) {
callback(recordset);
})
.catch(function (err) {
callback(null, err);
return;
});
})
.catch(function (err) {
callback(null, err);
});
};
更新後的呼叫號碼
async.each(data, function (obj, callback) {
//console.log(obj);
var sql = "USE " + obj.a + " EXEC [dbo].[SP] " + obj.c+ ", " + obj.b+ ""
db.executeSql(sql, function (data, err) {
if (err) return callback(err);
callback();
})
}, function (err) {
if (err) {
console.error(err);
responses.show500(req, resp, err);
} else {
responses.send200(req, resp);
}
})
感謝Sergy ..我會嘗試了這一點,以及:) – CKS