2017-07-26 63 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