2015-04-05 126 views
0

我是相當新的承諾,如此裸露與我。 我想從一個函數返回一個值,它調用使用承諾的第三個庫。承諾和阻止功能,返回值

比方說,我有一個函數(打字稿):

static get(): string { 
    return ??? lib.test().done(()=> {return "done"; }).fail(()=>{ return "fail"}); 
} 

裏面我打電話返回一個承諾第三方庫。 如何從這個函數返回只有lib返回的值而不重寫我的函數的值?我知道這違背了承諾的目的,但是lib只提供承諾作爲返回值。

+0

不,承諾打敗你。阻止並等待異步值是不可能的。 – Bergi 2015-04-05 11:04:04

+0

函數回調是什麼? lib.test(()=> {})?該lib提供了兩個! – Mantzas 2015-04-05 11:22:01

+1

是的,你可以從你的函數調用一個回調函數(或者傳遞給lib函數)。但是你不能從你的函數中返回值(僅僅是它的承諾)。 – Bergi 2015-04-05 15:15:23

回答

2

承諾代表將在未來一段時間內可用的異步結果。您無法將異步結果轉換爲Javascript中的同步結果。這是不能做到的。你的操作需要被調用者視爲異步,並且你的方法的接口需要是異步的(可能使用承諾,或者你可以隱藏承諾,如果你願意,可以回到普通的回調)。

+0

這是衆所周知的,因爲我在承諾中有新鮮感,但是在c#TPL中有很多經驗,我認爲在那裏我可以使用一種構造或方法使異步調用變成同步調用,而不需要重寫函數,它來電者等。 – Mantzas 2015-04-06 06:15:06

+0

@Mantzas - 我的回答是告訴你,在Javascript中,沒有辦法將異步操作轉換爲同步操作。它不能做到。 – jfriend00 2015-04-06 06:27:14

+0

謝謝。必須在重構整個項目之前刪除這個lib! – Mantzas 2015-04-06 11:27:59