如何从一系列级联异步代码中返回值
How to return value from a series of cascading async code
我需要一些关于如何重写/编写特定于数据库的级联代码(回调)的建议,这样我就可以有效地向底层if/else返回值。
我使用restify,数据库库是nodemssql(乏味)。
function authenticate(req, res, next) {
var auth = req.authorization;
var err;
if (auth.scheme !== 'Basic' || ! auth.basic.username || ! auth.basic.password) {
authFail(res);
err = false;
} else {
var sql = "SELECT ..."
var connection = new mssql.Connection(config.mssql, function(err) {
if (err) {console.log(err);}
var request = connection.request();
request.query(sql, function(err, recordset) {
if (err) {console.log(err);}
if (recordset.length === 0) {
authFail(res);
err = false; // <--- I need to be able to return this
} else {
authSuccess();
}
});
});
}
next(err);
}
我已经审查了建议的副本,虽然我认为,我理解这个问题,但我无法找到最干净的(老实说)方法来实现这一点。
使用Promise
s怎么样?
function authenticate(req, res, next) {
var auth = req.authorization;
if (auth.scheme !== 'Basic' || ! auth.basic.username || ! auth.basic.password) {
authFail(res);
next(false);
} else {
var sql = "SELECT ..."
var connection = new mssql.Connection(config.mssql, function(err) {
if (err) {console.log(err);}
var request = connection.request();
request.query(sql).then(function(recordset) {
if (recordset.length === 0) {
authFail(res);
return false; // <--- return this
} else {
authSuccess();
}
}).catch(function(err) {
console.log(err);
return err;
}).then(function(err) { next(err); });
});
}
}
相关文章:
- Javascript返回值只在循环中返回一次
- 如何从一系列级联异步代码中返回值
- 为什么这两段代码返回的值不同
- 为什么此代码返回未定义的4次而不是数组值
- php代码返回基于数组的值
- 如果我使用html表单(而不是ajax),则获取服务器的响应代码或返回值
- 代码返回上次刷新前的最新值,而不是插入的最新的值
- 代码点火器动态表单下拉列表,不返回值,而是返回 ID
- 如何在 c# 代码隐藏中调用具有返回值的 Javascript 函数
- 并非所有代码路径都返回值 (JavaScript)
- 从Background.js在页面级别执行代码并返回值
- 为什么我在使用ajax从php发送和返回值时会得到javascript和html代码
- 如何从C#代码背后定义一个未定义的返回值,JS/JQuery
- 在函数完成后运行代码并获得返回值
- 如何设置返回值时,javascript从后面的代码调用
- 通过Emscripten生成的代码不返回值
- ASP.NET:如何传递窗口.返回C#代码的值
- 获取从 JS 代码到 C# 的返回值
- 客户端函数返回HTML代码而不是服务器端返回值
- 在Selenium中获取Javascript代码的返回值