所以......我最近遇到了这个节点模块:async。对于我下面的情况,我只需要一点“表演和讲述”或最佳实践方法。您可以在下面看到我的函数GetBearerToken
,该函数在没有问题的情况下使用参数{bearer_token:token}
。
我的问题是变量ss
。我想在此函数之外使用它并将其传递给另一个函数来执行某些操作。当然,当我尝试访问ss
时,它是未定义的。我已经尝试了一些使文档中所示的工作方式,但我显然缺少一些东西。所以任何帮助都会很棒......谢谢
GetBearerToken({
bearer_token: token
}, function(error, result) {
if (error) throw error;
if (result) {
var resultset
var i;
for (i = 0; i < result.length; i++) {
resultset = (simpleObjectify(result[i].meta, result[i].rows))
}
var jstring = JSON.stringify(resultset);
var obj = JSON.parse(jstring);
var ss = obj[0].uuid;
console.log(ss)
})
在功能ss
之外是undefined
。
答案 0 :(得分:1)
首先阅读本文
What is the scope of variables in JavaScript?
您可以尝试使用.waterfall
方法
瀑布(任务,[回调])
运行函数的tasks数组,每个函数都通过它们 结果到阵列中的下一个。但是,如果任何任务通过了 错误到自己的回调,下一个函数没有执行,并且 主要的回调会立即调用错误。
您要完成的一个示例
async.waterfall([
function(callback) {
GetBearerToken({
bearer_token: token
}, function(error, result) {
if (error) throw error;
if (result) { // *note* don't forget to handle the result properly if an error occurs or the result is not what you expected.
var resultset
var i;
for (i = 0; i < result.length; i++) {
resultset = (simpleObjectify(result[i].meta, result[i].rows))
}
var jstring = JSON.stringify(resultset);
var obj = JSON.parse(jstring);
var ss = obj[0].uuid;
callback(null, ss); // call the next callback in waterfall with ss value
}
)
},
function(arg1, callback) {
// arg1 now equals ss value
callback(null,'all completed');
}
],
function(err, result) {
// result now equals 'all completed'
});
但是因为上面的代码似乎已朝着错误的方向迈出了一步
来调试。但是看看.waterfall
的例子,它打破了回调,然后调用.waterfall
方法。