所以我是Node.js的新手,我只是想知道我的代码设置方式是否合理.我来自Java背景,所以嵌套的回调结构是新的.我有一个Node程序运行一堆代码,我分解成不同的方法.问题是需要按顺序调用方法.我的代码现在有这个结构:
functionOne(data, callback(err) {
functionTwo(data, callback(err) {
functionThree(data, callback(err) {
functionFour(data, callback(err) {
//Code
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
这是非常简约的,但这个结构好吗?使用Java,我将获取所有方法的返回值,然后将它们传递给下一个函数.根据我的理解,到目前为止,我刚刚提到的Java方法是Node.js试图消除的主要内容之一.但无论如何......那个结构看起来还不错,那是不是它的意图呢?只是想确保我一般不会对Node造成任何重大错误.谢谢!
如果使用回调模式,您的代码结构看起来很好.但是如果你有兴趣让你的代码更清晰和可读,你想在你的异步函数中使用Promises,所以不要将回调传递给你的函数,你可以这样做:
function asyncFunction (data){
return new Promise(function(resolve, reject){
// Do something with data
// Here you can call reject(error) to throw an error
resolve();
});
}
Run Code Online (Sandbox Code Playgroud)
而不是嵌套函数回调,你可以调用Promise的方法.
asyncFunction(data)
.then(function(){
// Promise resolved
// Something has been done with data
});
Run Code Online (Sandbox Code Playgroud)
使用Promises,您还可以并行执行异步函数:
Promise.all([asyncFunctionA(data), asyncFunctionB(data), asyncFunctionC(data)])
.then(function(){...});
Run Code Online (Sandbox Code Playgroud)
编辑
如果需要将一个函数的值传递给另一个函数,则代码应如下所示:
asyncFunctionA(data)
.then(function(dataA){
return asyncFunctionB(dataA);
})
.then(function(dataB){
return asyncFunctionC(dataB);
})
.then(function(dataC){
// ...
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |