创建返回'thennable'的Promise。 (或使用Observable)

时间:2017-07-26 15:45:34

标签: promise observable es6-promise

我有一个'open'函数,我希望返回一个对调用方法的promise,这样在我的close函数中我解析了Promise

 open(config){
        this.closePromise = new Promise()

        return this.closePromise
    }

    close(closeArgs){
        this.closePromise.resolve(closeArgs)
        ...
    }

...这样当我的'close'函数被调用时,我的调用方法会得到回调:

myService.open(myData)
.then( closeArgs => console.log('closed'))

我收到的错误如'Promise resolver undefined不是函数' 我在这里查看文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve但似乎没有任何东西符合我的需要。 (我开始怀疑我是否应该在这种情况下使用Observable,因为它可能更适合我的情况)。

使用Promise这是一个糟糕的情况还是我只是做错了? 感谢

1 个答案:

答案 0 :(得分:1)

承诺没有resolve方法。您需要将执行程序回调传递给new Promise构造函数才能访问解析函数:

open(config) {
    return new Promise(resolve => {
        if (this.onClose) throw new Error("not yet closed, cannot open (again)");
        this.onClose = resolve;
    });
}

close(closeArgs) {
    if (!this.onClose) throw new Error("not yet opened, cannot close (again)")
    this.onClose(closeArgs);
    this.onClose = null;
}
相关问题