Node.js 和 Q Promises:如何以更简洁的方式传递参数?
Node.js and Q Promises: How can I hand over parameters in a cleaner way?
我有一些这样的代码:
function example(data){
asyncFnOne()
.all([asyncFnTwo(), data])
.spread(asyncFnThree)
.done();
};
这些函数的作用并不重要。我遇到的问题是我不知道 asyncFnThree 如何从 asyncFnTwo 和函数参数访问数据。我解决问题的方式不是很可读。是否有推荐的方法以干净的方式执行此操作?
第二个可能的想法是
function example(data){
asyncFnOne()
.then(asyncFnTwo)
.then(function(result){
asyncFnThree(result, data);
})
.done();
};
};
但我觉得可读性更差
您可以使用变量作为缓冲区或创建一些 "middle-man" 承诺。你可以在这里找到一些很好的例子:http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html?utm_source=javascriptweekly&utm_medium=email
要以所需的方式使用 Q.all
,您必须执行以下操作:
function example(data) {
return Q.all[
asyncFnOne().then(asyncFnTwo),
data
]).spread(asyncFnThree);
}
或者在链的第一部分使用变量,这样您就不必将所有内容都塞进一个表达式中,可以使用 return Q.all([promiseTwo, data])…
.
闭包的替代方法也完全没问题,而且相当标准。您不妨使用任何提供某种部分应用程序的库,并使用它代替函数表达式。
function example(data) {
return asyncFnOne()
.then(asyncFnTwo)
.then(asyncFnThree.bind(null, data)); // argument order to asyncFnThree: data, result
}
我有一些这样的代码:
function example(data){
asyncFnOne()
.all([asyncFnTwo(), data])
.spread(asyncFnThree)
.done();
};
这些函数的作用并不重要。我遇到的问题是我不知道 asyncFnThree 如何从 asyncFnTwo 和函数参数访问数据。我解决问题的方式不是很可读。是否有推荐的方法以干净的方式执行此操作?
第二个可能的想法是
function example(data){
asyncFnOne()
.then(asyncFnTwo)
.then(function(result){
asyncFnThree(result, data);
})
.done();
};
};
但我觉得可读性更差
您可以使用变量作为缓冲区或创建一些 "middle-man" 承诺。你可以在这里找到一些很好的例子:http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html?utm_source=javascriptweekly&utm_medium=email
要以所需的方式使用 Q.all
,您必须执行以下操作:
function example(data) {
return Q.all[
asyncFnOne().then(asyncFnTwo),
data
]).spread(asyncFnThree);
}
或者在链的第一部分使用变量,这样您就不必将所有内容都塞进一个表达式中,可以使用 return Q.all([promiseTwo, data])…
.
闭包的替代方法也完全没问题,而且相当标准。您不妨使用任何提供某种部分应用程序的库,并使用它代替函数表达式。
function example(data) {
return asyncFnOne()
.then(asyncFnTwo)
.then(asyncFnThree.bind(null, data)); // argument order to asyncFnThree: data, result
}