Я хочу написать обратный вызов по умолчанию для HTTP-запросов, сделанных с помощью superagent. Все вызовы выполнены с помощью рамки async.parallel() и общий результат обрабатывается вместе. Обратный вызов должен обрабатывать результаты HTTP-запросов и возвращать значение по умолчанию, если произошла ошибка. Значение по умолчанию может быть указано, но null
будет использоваться, если он не был установлен.Curried JavaScript-функция для свободного API
Я хочу построить свой обработчик, используя свободно синтаксис вроде этого:
handle(done).withDefaultValue([])
(пустой массив устанавливается как значение по умолчанию)
handle(done)
(нуль используется в качестве значения по умолчанию)
Я м относительно новый для работы карри. Вот что я пытался: я создал модуль 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
Что я делаю неправильно?
, когда вы говорите, что он работает для второго вызова, но не первый, вы имеете в виду, что вторая функция 'async.parallel' работ , но не тот, который использует 'widthDefaultValue'? – andyk
Извините, я написал это неправильно. Он работает для первого вызова (один с 'withDefaultValue'), но не для второго вызова. Я исправил это в описании выше. – tiefenauer
Это не имеет никакого отношения к карри. Вы имели в виду использовать термин «цепочка методов»? – Bergi