利用异步NPM模块
所以...我最近遇到了这个节点模块:async。我只需要针对我下面的情况做一点“展示并告诉”或最佳实践方法。在下面你可以看到我的功能GetBearerToken
,它的参数{bearer_token:token}
没有问题。利用异步NPM模块
我的问题是变量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
。
首先阅读本
What is the scope of variables in JavaScript?
您可以尝试使用.waterfall
方法
瀑布(任务,[回调])
运行的任务阵列功能串联,每一个都通过ir 结果到数组中的下一个结果。但是,如果任何任务将 错误传递给其自己的回调,则不会执行下一个函数,并且主回调将立即被调用并返回错误。
一个例子给你所要完成
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
方法。
谢谢GeoPhoenix的建议。我继续清理代码并考虑了您的建议和示例。最后一个问题,我会考虑这个答案。如果我想将整个事件包装到一个更大的函数中,然后获取异步功能的输出,比如输出1为完整或错误为0,那么最佳方法是什么? –
“最好的方法”是你更好的理解和更简单的实施。本质上,我会在瀑布内创建一个瀑布,如果我只使用“异步”,但这种方法对于大多数用户来说会很复杂。我会考虑使用'事件'或承诺,并正确地构建我的代码尽可能保持和简单。 – Gntem
谢谢GeoPhoenix。你是对的,我需要把我的头围绕异步概念更好一点。有了“事件”,你在说EventEmitter类中的Event Emitter吗?再次感谢。 –
谢谢Seth的编辑,非常感谢。 –