Здравствуйте, Doom100500, Вы писали:
VC>>P.S. в .NET у таски есть явный метод Start(). а в JavaScript нихрена не понятно
D>Promise вызывается сразу В смысле, что если не вызываешь .then, или забыл await, то просто не увидишь результат, не имеет возможности отмены, и вообще это низкоуровневая абстракция js.
D>Если хочешь подписки/отписки/отложенный запуск/полный контроль, или просто вникнуть в асинхронность и реактивность, погугли rxjs. Это библиотека Observables
Да вот пока не пойму как такое делают: В ивенте логически завершается flow и интуитивно хочется там записать resolve(errors);
// Надо вернуть промис массива ошибок:
async function runTest () {
const errors = [];
let resolveCopy = null, rejectCopy = null;
const ret = new Promise( (resolve, reject) => {
// свято верим что это выполнится сразу!
resolveCopy = resolve; rejectCopy = reject;
});
const protocol = .....;
protocol.Page.loadEventFired(async() => {
try
{
// тут всякая логика.
}
finally {
resolveCopy(errors);
}
});
protocol.Page.navigate({url: url});
return ret;
}
Фигня полная?
Неет! еще не полная.
Дополнительно нужна добавить обработку таймаута — если ивент
loadEventFired не вызвался за N миллискунд, то надо добавить в массив еrrors еще одну ошибку и сделать resolveCopy(errors)
Так делать принято или нет:
const delay = ms => new Promise(res => setTimeout(res, ms));
// Надо вернуть промис массива ошибок:
async function runTest () {
const errors = [];
let resolveCopy = null, rejectCopy = null;
const ret = new Promise( (resolve, reject) => {
// свято верим что это выполнится сразу!
resolveCopy = resolve; rejectCopy = reject;
});
const protocol = .....;
protocol.Page.loadEventFired(async() => {
try
{
// тут всякая логика.
}
finally {
resolveCopy(errors);
}
});
protocol.Page.navigate({url: url});
new Promise(async () => {
await delay(5000);
if (!resolved)
{
errors.push("Timeout expired. Page cannot be not loaded");
resolveCopy(errors);
}
});
return ret;
}
Даже не знаю то ли оно будет делать что надо?