我有一个使用mssql
驱动程序的nodeJS应用程序与我的SQL数据库进行交互。我希望有一个函数从数据库中获取值,但是,在第一次使用时,该表将不存在,因此如果存在特定错误,我想调用我的createValue()
函数。下面的代码有效,但我必须调用它两次才能获得值。基本上,如果满足.catch
中的条件,我想再次调用Request
。有这样一种巧妙的方法吗?
var value;
new sql.Request().query('select * from _table')
.then(function (recordset) {
value = recordset;
})
.catch(function (err) {
console.log("Query Error: " + err);
if (err.message == "Invalid object name '_table") {
createValue();
}
})
更新
我现在有以下功能,但我应该如何最好地让它返回recordset
?
function getData() {
sql.connect("mssql://username:password@localhost/mytestdatabase").then(function () {
return new sql.Request().query('select * from _table')
.then(function (recordset) {
console.log(recordset); // <-- THIS IS WHAT I WANT TO RETURN
})
.catch(function (err) {
console.log("Query Error: " + err);
if (err.message == "Invalid object name '_table") {
updateValue();
return getData();
}
return null;
})
}).catch(function (err) {
console.log("Connection Error: " + err);
})
};
答案 0 :(得分:1)
您可以将其包装在一个函数中,然后可以递归调用。
我假设createValue()
是同步的。
function getData(){
return new sql.Request().query('select * from _table')
.catch(function (err) {
if (err.message == "Invalid object name '_table") {
createValue();
return getData();
}
throw err;
});
}
...
var resultsetPromise = getData();
resultsetPromise.then( function(resultset){
// do something with your data
}).catch( function(err){
console.log("Query Error: " + err);
});