ECMAScript 6 имеет «генераторы», которые позволяют вам легко программировать в асинхронном стиле.
function* myGenerator() {
const callback = yield;
let [response] = yield $.ajax("https://stackoverflow.com", {complete: callback});
console.log("response is:", response);
// examples of other things you can do
yield setTimeout(callback, 1000);
console.log("it delayed for 1000ms");
while (response.statusText === "error") {
[response] = yield* anotherGenerator();
}
}
Для запуска вышеуказанного кода вы делаете это:
const gen = myGenerator(); // Create generator
gen.next(); // Start it
gen.next((...args) => gen.next([...args])); // Set its callback function
Если вам нужно настроить таргетинг на браузеры, которые не поддерживают ES6, вы можете запустить код через Babel или short-compiler для генерации ECMAScript 5.
Обратный вызов ...args
завернут в массив и разрушен, когда вы их читаете так что шаблон может справиться с обратными вызовами, которые имеют несколько аргументов. Например, с узлом fs :
const [err, data] = yield fs.readFile(filePath, "utf-8", callback);
каждый компонент JSF отображается в HTML и имеет полный контроль над тем, что он производит. Существует много трюков, которые могут быть использованы JSF, и точно, какой из этих трюков будет использоваться, зависит от используемой вами реализации JSF.
http:..../somelink?componentId=123
позволит jsf искать в дереве компонентов, чтобы увидеть, что была нажата ссылка 123. или это может быть e htp:..../jsf;LinkId=123
Самый простой способ ответить на этот вопрос - создать страницу JSF только с одной ссылкой, а затем изучить вывод html, который он создает. Таким образом вы точно узнаете, как это происходит, используя версию JSF, которую вы используете.