我正在尝试从result
函数返回getColumn
参数。记录时,它返回undefined。
连接函数连接到SQL DB,查询返回数据集。
如何将变量传递回承诺链?
getColumn = function(columnName, table) {
sql.connect(config.properties)
.then(result => {
let request = new sql.Request();
request.query("SELECT " + columnName + " FROM " + table)
.then(result => {
// want to return this result from the getColumn function
return result
}).catch(err => {
// Query error checks
})
}).catch(err => {
// Connection error checks
})
} //
console.log(getColumn('username', 'Login'))
答案 0 :(得分:1)
首先,您无法直接从getColumn()
返回值。该函数的内部是异步的,因此在AFTER getColumn()
返回之前不会知道该值。您目前从undefined
获得getColumn()
,因为它没有返回值。您拥有的return
是异步.then()
处理程序,而不是getColumn()
。无法从getColumn()
返回最终值。它是异步的。您必须返回承诺或使用回调。由于您已经在函数内部使用了promises,因此您应该返回一个promise。
您可以从getColumn()
返回承诺,并使用.then()
或await
承诺获取该值。
要返回承诺,您需要返回内部承诺:
const getColumn = function(columnName, table) {
// return promise
return sql.connect(config.properties).then(result => {
let request = new sql.Request();
// chain this promise onto prior promise
return request.query("SELECT " + columnName + " FROM " + table);
});
} //
getColumn('username', 'Login').then(val => {
console.log(val);
}).catch(err => {
console.log(err);
});