2017-07-26 35 views
0

我有一个函数“开放”,我想一个承诺返回到调用方法,让我关闭功能我解决了无极创建承诺,返回“thennable”。 (或使用可观察)

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

     return this.closePromise 
    } 

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

......让我的呼唤方法得到了当我的“亲密”函数被调用这样的回调:

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

我得到这样的错误“无极解析不确定是不是一个函数” 我在看的文档这里https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve,但似乎没有以适应我的需求。 (IM开始怀疑我是否应该只使用可观察到的在这种情况下,因为它可能适合我的情况好)。

这是一个糟糕的情况是使用一个承诺或我做错了我? 感谢

回答

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; 
} 
+0

谢谢!完美地阐明了它 – 29er