Javascript 如何将参数传递给节点';sq图书馆';s(去指代)承诺处理程序
在下面的代码中,我希望在调用Javascript 如何将参数传递给节点';sq图书馆';s(去指代)承诺处理程序,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,在下面的代码中,我希望在调用processhttprequest()时将变量a、b、c作为参数传递 var q = require("q"); var request = require('request'); function myfun() { var a, b, c; //do some work here var httprequest = q.denodeify(request); var
processhttprequest()
时将变量a、b、c
作为参数传递
var q = require("q");
var request = require('request');
function myfun()
{
var a, b, c;
//do some work here
var httprequest = q.denodeify(request);
var httprequestpromise = httprequest(httpoptions);
httprequestpromise.then(processhttprequest);
}
我尝试了httprequestpromise.then(processhttprequest.bind([a,b,c])代码>但是没有运气。Q或任何其他promise库是否支持此功能。您可以像这样使用.bind()
:
httprequestpromise.then(processhttprequest.bind(null, a, b, c));
function myfun()
{
var a, b, c;
//do some work here
var httprequest = q.denodeify(request);
var httprequestpromise = httprequest(httpoptions);
httprequestpromise.then(function(result) {
return processhttprequest(a, b, c, result);
});
}
这将创建一个伪函数,该函数将在调用processhttprequest()
之前添加参数a
、b
和c
或者,您可以使用自己的存根函数手动执行此操作,如下所示:
httprequestpromise.then(processhttprequest.bind(null, a, b, c));
function myfun()
{
var a, b, c;
//do some work here
var httprequest = q.denodeify(request);
var httprequestpromise = httprequest(httpoptions);
httprequestpromise.then(function(result) {
return processhttprequest(a, b, c, result);
});
}
不接受数组。一旦您修复了bind
的用法,您的代码应该按照您所描述的那样工作
试一试
httprequestpromise.then(processhttprequest.bind(null,a,b,c))代码>
或
httprequestpromise.then(函数(){
processhttprequest(a、b、c);
});
绑定的第一个参数是您希望函数使用的任何参数。不要传递数组。但我的问题不是关于bind
方法在javascript中如何工作,而是关于promise在节点的Q库中如何工作。顺便说一句,bind
我尝试了很长时间。你不需要使用bind
,但是如果你纠正你对它的使用,我想你的代码会像你希望的那样工作。哇,人们仍然在使用Q o_0?我使用的云平台不支持最新的节点来使用泛型。顺便说一句,还有其他建议的promise库吗?感谢您清楚地解释这一点。除了解决我的问题……现在,我开始理解存根函数的必要性。再次感谢!关于手动存根函数的说明。结果
是否也会被传递到processhttprequest()
,或者结果
是否可以通过闭包在processhttprequest()
中访问?@Dan:除非在存根回调中声明了processhttprequest
,否则没有闭包。您需要将它显式地作为参数传递,我已经获得编辑jfriend答案的自由,以表明这一点。@Dan-在.bind()
示例中,a
、b
和c
参数是then()
将添加的结果
参数之外的参数.bind()
将这些参数置于前面。在第二个示例中,您自己直接调用processHttpRequest()
,这样它就可以得到您传递给它的任何参数。如果你想通过result
,你可以通过它——如果你不需要它,你就不需要通过它——这完全取决于你自己。