需要在变量中保持承诺结果以进行 Nodejs mssql 验证
Need to keep promise result in a variable for Nodejs mssql validation
let RetrieveFromDb=(queryStr) =>
{
let sql=require('mssql');
let config={
server:'127.0.0.1',
database:'TestDB',
user:'user',
password:'user',
};
let dbConn=new sql.Connection(config);
return dbConn.connect().then(function (){
let request=new sql.Request(dbConn);
return request.query(queryStr)
.then(function(recordset)
{
return recordset;
dbConn.close();
}).catch(function (err) {
console.log(err);
dbConn.close();
});
}).catch(function (err) {
console.log(err);
});
};
RetrieveFromDb("Select FirstName from User where UserID='1'").then(function(x){console.log(x[0].FirstName);});//console is displying the FirstName value from DB
RetrieveFromDb("Select FirstName from User where UserID='1'").then(res=>{console.log(res[0].FirstName)});//console is displying the FirstName value from DB
以上两个函数调用返回值到控制台,但我想将 RetrieveFromDb() 的结果保存到一个变量中,以便我可以与其他数据进行比较以进行验证。
假设 var actualFirstname=RetrieveFromDb(myquery);
那么我将比较 if(actualFirstname===expectedFirstName)
与否。
Promise 是一种代码同步方法,因此您必须将它们的操作视为异步操作,并使用您在 promise 解析时获得的值。没办法:
var actualFirstName = RetrieveFromDb(myquery);
actualFirstName === expectedFirstName;
相反,您必须在 promise 解析时进行比较:
RetrieveFromDb(myquery).then(data => {
data.actualFirstName === expectedFirstName;
});
谢谢大家,几天来我一直在兜圈子,试图了解代码的异步特性。对我来说,灯泡时刻是你必须将变量值设置为 callback/promise 堆栈的一部分(即在函数内分配它)我的背景是 Excel、VBA、Sequel 服务器,PHP oop,C#。在所有这些语言中,函数是运行一段谨慎的代码和 returns 一个值,然后将其分配给等式左侧的对象。
function myFunc(){ return 'Hello World'}
var myvar = myFunc() // sets myvar to 'Hello World'
在 Node 上你必须做赋值 IN 函数
function myFunc(){ myvar = 'Hello world'}
所以要从数据库中获取数据:
fetchFromDB('Select top 10 * from x',(err,res) =>{ myvar1 = res})
fetchFromDB('Select top 10 * from Y',(err,res) =>{ myvar2 = res})
let RetrieveFromDb=(queryStr) =>
{
let sql=require('mssql');
let config={
server:'127.0.0.1',
database:'TestDB',
user:'user',
password:'user',
};
let dbConn=new sql.Connection(config);
return dbConn.connect().then(function (){
let request=new sql.Request(dbConn);
return request.query(queryStr)
.then(function(recordset)
{
return recordset;
dbConn.close();
}).catch(function (err) {
console.log(err);
dbConn.close();
});
}).catch(function (err) {
console.log(err);
});
};
RetrieveFromDb("Select FirstName from User where UserID='1'").then(function(x){console.log(x[0].FirstName);});//console is displying the FirstName value from DB
RetrieveFromDb("Select FirstName from User where UserID='1'").then(res=>{console.log(res[0].FirstName)});//console is displying the FirstName value from DB
以上两个函数调用返回值到控制台,但我想将 RetrieveFromDb() 的结果保存到一个变量中,以便我可以与其他数据进行比较以进行验证。
假设 var actualFirstname=RetrieveFromDb(myquery);
那么我将比较 if(actualFirstname===expectedFirstName)
与否。
Promise 是一种代码同步方法,因此您必须将它们的操作视为异步操作,并使用您在 promise 解析时获得的值。没办法:
var actualFirstName = RetrieveFromDb(myquery);
actualFirstName === expectedFirstName;
相反,您必须在 promise 解析时进行比较:
RetrieveFromDb(myquery).then(data => {
data.actualFirstName === expectedFirstName;
});
谢谢大家,几天来我一直在兜圈子,试图了解代码的异步特性。对我来说,灯泡时刻是你必须将变量值设置为 callback/promise 堆栈的一部分(即在函数内分配它)我的背景是 Excel、VBA、Sequel 服务器,PHP oop,C#。在所有这些语言中,函数是运行一段谨慎的代码和 returns 一个值,然后将其分配给等式左侧的对象。
function myFunc(){ return 'Hello World'}
var myvar = myFunc() // sets myvar to 'Hello World'
在 Node 上你必须做赋值 IN 函数
function myFunc(){ myvar = 'Hello world'}
所以要从数据库中获取数据:
fetchFromDB('Select top 10 * from x',(err,res) =>{ myvar1 = res})
fetchFromDB('Select top 10 * from Y',(err,res) =>{ myvar2 = res})