typescript - Promise 的自定义方法
typescript - custom method off Promise
我已经声明了一个 returns 承诺的方法:
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(() => { });
有人对如何实施有建议吗?或者至少我可以在哪里 google 解决方法?
据我所知,您提出的方法等同于 then
和 catch
(then
也接受拒绝回调,但它不必接受):
confirm("", "")
.then(()=> {})
.catch(()=> {})
如果你真的想添加这样的别名,你可以添加到 prototype
,但你必须声明它们以便 typescript 知道这一点:
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 来处理 promise,也许它更适合您的情况:
(async function () {
try {
await confirm('', '');
console.log('ok')
} catch (e) {
console.log('fail')
}
})()
我已经声明了一个 returns 承诺的方法:
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(() => { });
有人对如何实施有建议吗?或者至少我可以在哪里 google 解决方法?
据我所知,您提出的方法等同于 then
和 catch
(then
也接受拒绝回调,但它不必接受):
confirm("", "")
.then(()=> {})
.catch(()=> {})
如果你真的想添加这样的别名,你可以添加到 prototype
,但你必须声明它们以便 typescript 知道这一点:
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 来处理 promise,也许它更适合您的情况:
(async function () {
try {
await confirm('', '');
console.log('ok')
} catch (e) {
console.log('fail')
}
})()