Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 将Superagent与A+一起使用;规格?_Javascript_Node.js_Promise_Bluebird_Superagent - Fatal编程技术网

Javascript 将Superagent与A+一起使用;规格?

Javascript 将Superagent与A+一起使用;规格?,javascript,node.js,promise,bluebird,superagent,Javascript,Node.js,Promise,Bluebird,Superagent,我如何使用,但与承诺A+规格?我正在从事一个同时使用Superagent和的项目,我想使用.then()语法,但如果不编写自己的包装器代码,就无法找到一种简单的方法来实现这一点 但我不想每次调用都使用.promise() 有没有其他现有的模块使它看起来更像蓝鸟 更像是- var request = ('superagent-wrapperModule'); request.get(url).then(..).catch(...) [编辑]实际上,我已经制作了一个模块,以我喜欢的方式完成这项

我如何使用,但与承诺A+规格?我正在从事一个同时使用Superagent和的项目,我想使用
.then()
语法,但如果不编写自己的包装器代码,就无法找到一种简单的方法来实现这一点

但我不想每次调用都使用.promise()

有没有其他现有的模块使它看起来更像蓝鸟

更像是-

var request = ('superagent-wrapperModule');

request.get(url).then(..).catch(...) 
[编辑]实际上,我已经制作了一个模块,以我喜欢的方式完成这项工作(类似于上面的示例)


如果有人感兴趣,并且

如@idbehold和@victorkohl发表了评论,
superagent
需要调用
end
以知道请求正在发送。为此,
超级代理bluebird promise
适配器选择使用
.promise()
方法,该方法还接受一个option对象

如果您不喜欢,也不需要选项,我建议您只需在请求对象上定义自己的
然后
方法:

var request = require('superagent-bluebird-promise');
request.Request.prototype.then = function(s, e) {
    return this.promise().then(s, e);
};
这样你就可以使用

request.get(url).then(…).catch(…);

(我也打开了这个)

没有在每次调用结束时使用
.promise()
库如何知道您何时真正想要发送请求?问题是
superagent
在您调用
end
之前不会发送请求,所以即使您使用
promisifyAll
这样做,您必须调用
endAsync
来发送请求。@idbehold,我认为您需要实际创建并显式返回一个新承诺(假设在这里使用Bluebird),然后手动调用resolve/rejects。我看看能不能找到一个要点来更好地解释它。另一个选择可能是将Superagent重写为基于承诺的。@victorkohl好的,我做了一个演示您想法的示例,但添加了
。然后()
到原型链中。据我所知,它似乎工作得很好。@JustinMaat看起来很有趣,谢谢分享。我更喜欢你的方法名,而不是
。promise()
嗯,它不仅仅是“一个方法名”,而是a+互操作性功能:-)在调用一个get之后,最好只向对象添加
then()
方法,超级代理对象上的post、put、patch或delete方法。@idbehold:我不知道超级代理是如何工作的,导出对象上的所有这些函数不都返回
Request
实例吗?如果
request
已经是一个,那么如果直接在它上面调用
.end()
会发生什么呢?@Bergi,我会将其标记为已接受。如果其他人感兴趣,我将从github向我们的票证/讨论添加链接。