Еще один подход к возврату значения из асинхронной функции - передать объект, который сохранит результат от асинхронной функции.
Вот пример того же:
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
для хранения значения во время асинхронной операции. Это позволяет получить результат даже после асинхронного задания.
Я использую этот подход много. Мне было бы интересно узнать, насколько хорошо этот подход работает, когда задействован результат обратно через последовательные модули.
Проблема связана с операторами {...}
, имеющими несколько значений в JavaScript.
Когда {
появляется в начале Statement , он всегда будет представлять block , которому нельзя назначить. Если он появится позже в Statement как выражение , тогда он будет представлять объект.
var
помогает сделать это различие, поскольку за ним не может следовать инструкция , как группировка скобок :
( {a, b} = objectReturningFunction() );
Ссылка из MDN:
Повторное использование одной и той же переменной в пределах одной и той же функции или области кадра вызывает синтаксический эффект.
if (x) {
let foo;
let foo; // SyntaxError thrown.
}