我有与db相关的函数db.js,我想调用db.js并等待,直到它返回查询结果。 但是执行db调用后返回结果。任何人都可以请帮助如何解决这个问题。如何在JavaScript中使用延迟/承诺数据库调用
代码示例:
var Q = require('q');
db= require("./dbaccess.js");
function waitfor(ms){
var deferred = Q.defer();
setTimeout(function() {
deferred.resolve(db);
}, 5000);
return deferred.promise;
}
waitfor(2000).done(function(dbcall) {
console.log('contrived example '+ dbcall.query1());
});
dbacess.js:
var sql = require('mssql');
var config = {
user: 'xx',
password: 'xxx',
server: 'aaa',
database: 'RequestCenter',
stream: true,
}
this.query1=function() {
sql.connect(config, function(err) {
var result;
var request = new sql.Request();
request.query("select * from dbo.AcAccount where Name like 'AutomationCli%' ");
request.on('row', function(row) {
console.log(row.Name);
result = row.Name;
});
request.on('error', function(err) {
console.log("err : "+err);
});
request.on('done', function(returnValue) {
console.log("done");
});
return result;
});
sql.on('error', function(err) {
console.log("sql err : "+err);
});
}
输出:
contrived example undefined
in db: AutomationClient
预期输出:
in db: AutomationClient
contrived example AutomationClient
db.query1()返回什么? –
请包括'dbaccess.js'代码 – timothyclifford
增加了dbaccess.js代码 – user2677647