【发布时间】:2016-03-03 19:33:39
【问题描述】:
我有带有 db 相关功能的 db.js,我想调用 db.js 并等待它返回查询结果。 但结果是在执行 db 调用后返回的。任何人都可以请帮助如何解决这个问题。
代码示例:
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代码 -
添加了 dbaccess.js 代码
-
"执行 db 调用后返回结果" - 这就是异步的工作原理;你将无法改变这一点。也没有承诺。
标签: javascript promise q deferred