Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将参数传递给节点';sq图书馆';s(去指代)承诺处理程序_Javascript_Node.js_Promise_Q - Fatal编程技术网

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
,你可以通过它——如果你不需要它,你就不需要通过它——这完全取决于你自己。