我使用以下代码来解析promise
外部函数范围。
private promiseResolver: ()=>void;
getPromise(): Promise<any> {
return new Promise((resolve, reject) => {
this.promiseResolver = resolve;
});
}
continueProcessing() {
this.promiseResolver();
}
它工作正常但是我想创建一个promiseResolver
数组来解决多个承诺。
private promiseResolvers: [()=>void];
getPromise(): Promise<any> {
return new Promise((resolve, reject) => {
this.promiseResolvers.push(resolve);
});
}
continueProcessing() {
this.promiseResolvers[0]();
}
getPromise()
函数的调用者不会在使用数组时等待解析的承诺。
是否可以创建这样的promise
解析器数组?
答案 0 :(得分:0)
正如人们在评论中说的那样,这是一种反模式,我保证99%的项目不需要此功能。但是,如果您的项目占该比例的1%,那么会有一个答案
您可能想要做同样的事情,但是像这样包装在“元”类中:
class Awaiter{
constructor(){
var resolve,
reject,
promise = new Promise((_, $) => { resolve = _; reject = $ });
Object.assign(promise, { resolve, reject })
return promise
}
}
我看到您正在使用打字稿,因此该类也有打字内容:
interface Awaiter<T = any> extends Promise<T>{
resolve: (value?: T) => void
reject: (reason?: any) => void
}
const Awaiter: {
new(): Awaiter
prorotype: Awaiter
}
因此,如您所见,不需要使用数组。每个解析器和拒绝器都有自己的作用域。
示例:
const myAwaiter = new Awaiter;
(async () => {
await myAwaiter;
console.log('awaiter resolved')
})();
setTimeout(() => {
myAwaiter.resolve()
}, 5000)