Promise resolver数组不起作用

时间:2017-08-19 16:43:59

标签: javascript typescript promise rxjs

我使用以下代码来解析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解析器数组?

1 个答案:

答案 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)