Javascript 将Superagent与A+一起使用;规格?
我如何使用,但与承诺A+规格?我正在从事一个同时使用Superagent和的项目,我想使用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(...) [编辑]实际上,我已经制作了一个模块,以我喜欢的方式完成这项
.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向我们的票证/讨论添加链接。