因此,我是Node.js的新手,我只是想知道我进行代码设置的方式是否有意义。我来自Java背景,因此嵌套的回调结构是新的。我有一个Node程序,该程序运行一堆分解为不同方法的代码。问题是方法需要按顺序调用。我的代码现在具有以下结构:
functionOne(data, callback(err) {
functionTwo(data, callback(err) {
functionThree(data, callback(err) {
functionFour(data, callback(err) {
//Code
});
});
});
});
这是非常简单的方法,但是这种结构可以吗?使用Java,我将获取所有方法的返回值,然后将它们传递给下一个函数。从到目前为止的理解来看,我刚刚提到的Java方法是Node.js试图消除的主要内容之一。但是无论如何...这种结构看起来还不错,它的外观如何?只是要确保我总体上不会对Node造成任何重大错误。谢谢!
您应该尝试使用promises
以避免回调地狱,所以可能是这样的事情...
const Q = require('q'); // you can do a research for this module.
var myModule = {};
myModule.functionOne = (params) => {
const deferred = Q.defer(); // wait for this to complete
// body function
deferred.resolve(data); // this would be the result of this function
return deferred.promise; // data is the output on your function
}
myModule.functionTwo = (params) => {
const deferred = Q.defer(); // wait for this to complete
// body function
deferred.resolve(data); // this would be the result of this function
return deferred.promise; // data is the output on your function
}
myModule.doAll = (params) => {
myModule.functionOne(params)
.then((outputFunctionOne) => {
// this is called after functionOne ends
return myModule.functionTwo(outputFunctionOne);
})
.then((outputFunctionTwo) => {
// this is called after function 2 ends
if (outputFunctionTwo.success) {
// if everything ok, resolve the promise with the final output
deferred.resolve(outputFunctionTwo);
} else {
// reject the promise with an error message
deferred.reject('error');
}
})
.fail((err) => {
// this is call if the promise is rejected or an exception is thrown
console.log(err); // TODO: Error handling
})
.done();
}
module.exports = myModule;
您可以非常轻松地随意链接任意数量的Promise,这样就摆脱了回调地狱。最好的部分是,您可以在Javascript或Node.js上做出承诺
参考链接https://github.com/kriskowal/q
希望这可以帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句