Ответ 1
Ключ заключается в том, чтобы использовать ES6 Promise или что-то, что реализует интерфейсы PromiseLike
и PromiseConstructorLike
найденные в lib.d.ts (подробнее). Обещание jQuery не реализует эти интерфейсы, поэтому оно не будет работать с этим.
Вот простой пример использования обещания ES6:
function getStringFromWebServerAsync(url: string) {
return new Promise<string>((resolve, reject) => {
// note: could be written '$.get(url).done(resolve).fail(reject);',
// but I expanded it out for clarity
$.get(url).done((data) => {
resolve(data);
}).fail((err) => {
reject(err);
});
});
}
async function asyncExample() {
try {
const data = await getStringFromWebServerAsync("http://localhost/GetAString");
console.log(data);
}
catch (err) {
console.log(err);
}
}
asyncExample();
Обратите внимание, что любой код, содержащий оператор await
должен находиться внутри async
функции, поэтому я заключил код в одну. Тем не менее, предстоящее предложение добавляет "ожидание на высшем уровне". Узнайте больше здесь.