熟练的API JavaScript函数
Curried JavaScript function for fluent API
我想为使用超级代理发出的HTTP请求编写一个默认回调。所有的调用都是使用async.parallel()框架进行的,整体结果一起处理。回调应该处理HTTP请求的结果,并在发生错误时返回默认值。可以指定默认值,但如果未设置,则将使用null
。
我想使用一个流畅的语法来构建我的处理程序,比如:
handle(done).withDefaultValue([])
(空数组设置为默认值)
handle(done)
(默认值为空)
我对函数咖喱还比较陌生。以下是我尝试过的:我创建了一个节点模块,它最终应该像这样使用:
我在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
我做错了什么?
这似乎奏效了:
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));
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别