我想为使用superagent的HTTP请求编写默认回调。调用都是使用async.parallel()框架进行的,并且整体结果一起处理。如果发生错误,回调应处理HTTP请求的结果并返回默认值。可以指定默认值,但如果未设置,则使用null
。
我想使用这样的流畅语法构建我的处理程序:
handle(done).withDefaultValue([])
(空数组设置为默认值)
handle(done)
(null用作默认值)
我对于currying功能相对较新。这是我尝试过的: 我创建了一个Node模块,最终应该像这样使用:
我在handle.js
module.exports = function(done){
this.withDefaultValue = function(defaultValue){
return function(err, result){
if(err){
debug('handling error ' + err + ' and returning default value ' + defaultValue)
return done(null, defaultValue)
}
// sanity check for null and empty objects
result = _.isEmpty(result)?[]:result
done(null, result)
}
}
return this
}
我在somefile.js
var handle = require('handle')
async.parallel([
function(done){
api.myApiCall(arg1, arg2, handle(done).withDefaultValue([]))
},
function(done){
api.myOtherApiCall(arg1, arg2, handle(done))
}
], function(err, result){
})
以上代码适用于第一个电话(withDefaultValue([])
,但不适用于第二个电话:
Unhandled Error: handle(...).withDefaultValue is not a function
我做错了什么?
答案 0 :(得分:0)
这似乎可以解决问题:
console.log = x => document.write(x + "<br>");
function handle(func) {
var handler = function(param) {
console.log('doing stuff...');
func(param);
};
var ret = handler.bind(this, "default");
ret.withDefault = function(val) {
return handler.bind(this, val);
}
return ret;
}
function done(param) {
console.log(param)
}
setTimeout(handle(done));
setTimeout(handle(done).withDefault(123));
&#13;