При использовании Dojo, Вы просто называете dojo.hitch (), который делает почти точно, что Вы хотите. Почти — потому что это может использоваться для упаковки контекста также. Но Ваш пример является первым:
dojo.hitch(out, "hello")("world");
dojo.hitch(out, "hello", "world")();
, А также:
var A = {
sep: ", ",
out: function(a, b){ console.log(a + this.sep + b); }
};
// using functions in context
dojo.hitch(A, A.out, "hello")("world");
dojo.hitch(A, A.out, "hello", "world")();
// using names in context
dojo.hitch(A, "out", "hello")("world");
dojo.hitch(A, "out", "hello", "world")();
dojo.hitch () является частью Основы Dojo, поэтому как только Вы включали dojo.js, это там для Вас.
Другое общее средство доступно в dojox.lang.functional.curry модуле (зарегистрированный в Функциональная забава в JavaScript с Dojo — просто взгляд на эту страницу для "карри"). Конкретно можно хотеть посмотреть на карри (), и неравнодушный ().
карри () накапливает аргументы (как в Вашем примере), но с одним различием: как только арность удовлетворена, что вызывает функцию, возвращая значение. Реализация Вашего примера:
df.curry(out)("hello")("world");
df.curry(out)("hello", "world");
Уведомление, которое последняя строка не имеет" ()" в конце — это называют автоматически.
неравнодушный () позволяет заменять аргументы наугад:
df.partial(out, df.arg, "world")("hello");
Нет ничего принципиально неправильного в том, что вы делаете, но вам нужно сбросить / закрыть средство записи потока запросов. Это можно легко сделать с помощью конструкции using
, поскольку удаление писателя также сбрасывает ее:
using (StreamWriter writer = new StreamWriter(req.GetRequestStream()))
{
writer.WriteLine(xml.ToString());
}
Затем вам нужно вызвать GetResponse
, чтобы фактически выполнить запрос:
req.GetResponse()
(Обратите внимание, что HttpWebResponse
, возвращенный из этого, также является одноразовым, так что не забудьте утилизировать и его.)
Я использую класс WebClient:
WebClient webClient = new WebClient();
using (webClient)
{
requestInterceptor.OnRequest(webClient);
var enc = new ASCIIEncoding();
return enc.GetString(webClient.UploadData(uri, enc.GetBytes(dataAsString)));
}