Еще один подход к возврату значения из асинхронной функции - передать объект, который сохранит результат от асинхронной функции.
Вот пример того же:
var async = require("async");
// This wires up result back to the caller
var result = {};
var asyncTasks = [];
asyncTasks.push(function(_callback){
// some asynchronous operation
$.ajax({
url: '...',
success: function(response) {
result.response = response;
_callback();
}
});
});
async.parallel(asyncTasks, function(){
// result is available after performing asynchronous operation
console.log(result)
console.log('Done');
});
Я использую объект result
для хранения значения во время асинхронной операции. Это позволяет получить результат даже после асинхронного задания.
Я использую этот подход много. Мне было бы интересно узнать, насколько хорошо этот подход работает, когда задействован результат обратно через последовательные модули.
Да, оба кавычки разрешены в значениях атрибутов, но вы должны исключить HTML-код, который вы используете в качестве разделителя значений атрибута, а также другие специальные символы HTML, такие как <
и &
:
function encodeHTML(s) {
return s.split('&').join('&').split('<').join('<').split('"').join('"').split("'").join(''');
}
var html= '<label my_attr="'+encodeHTML(attr_value)+'">Text</label>';
Однако вы, как правило, намного лучше not , пытаясь взломать документ из строк HTML. Вы рискуете ошибками и HTML-инъекцией (приводящей к сквозным ошибкам в области межсайтового скриптинга) каждый раз, когда вы забываете сбежать. Вместо этого используйте методы типа DOM, такие как attr()
, text()
и ярлык построения:
$('body').append(
$('<label>', {my_attr: attr_value, text: 'Text'})
);
Вы можете использовать одинарные кавычки внутри двойных кавычек или двойные кавычки внутри одинарных кавычек. Если вы хотите использовать одинарные кавычки внутри одинарных кавычек или двойных кавычек в двойных кавычках, вы должны их кодировать HTML.
Допустимая разметка:
<label attr="This 'works'!" />
<label attr='This "works" too' />
<label attr="This does NOT \"work\"" />
<label attr="And this is "OK", too" />
Использовать двойные кавычки как разделитель атрибутов:
var html = "<label my_attr=\"" + attr_value + "\">Text</label>";