машинопись - пользовательский метод от Promise - PullRequest
0 голосов
/ 05 июля 2018

Я объявил метод, который возвращает обещание:

confirm(title: string, message: string) {
    var promise = new Promise((resolve, reject) => {

        ....

        if (success) {
            resolve();
        } else {
            reject();
        }
    });
    return promise;
}

Единственный способ работы с ним заключается в следующем

confirm(...).then(() => { /*success code*/ }, () => { /*error code*/ });

Я хотел бы ввести пользовательские обратные вызовы для простоты, но не совсем уверен, как это сделать.

Вот что я имею в виду - разбиение .then на два метода:

confirm(...)
  .done(() => { })
  .fail(() => { });

У кого-нибудь есть предложения по его реализации? Или хотя бы где можно гуглить обходные пути?

1 Ответ

0 голосов
/ 06 июля 2018

Методы, которые вы предлагаете, эквивалентны then и catch из того, что я могу сказать (then также принимает обратный вызов отклонения, но это не обязательно):

confirm("", "")
    .then(()=> {})
    .catch(()=> {})

Если вы действительно хотите добавить такие псевдонимы, вы можете добавить их к prototype, но вы должны объявить их, чтобы машинопись узнала об этом:

declare global { // declare global { ... } needed if we are in a module, otherwise just the content of this block is needed
    interface Promise<T> {
        done(done : () => void): Promise<void>//overly simplistic, should be oveloded if we want this to be general propose
        fail(done : () => void): Promise<void>//overly simplistic, should be oveloded if we want this to be general propose
    }
}

Promise.prototype.done  =Promise.prototype.then;
Promise.prototype.fail  =Promise.prototype.catch;

confirm("", "")
    .done(()=> console.log("ok"))
    .fail(()=> console.log("fail"))

Вы также можете использовать async / await для работы с обещанием, возможно, это лучше для вашего случая:

(async function () {
    try {
        await confirm('', '');
        console.log('ok')
    } catch (e) {
        console.log('fail')
    }
})()
...