2016-02-25 91 views
0

我需要將回調傳遞給簽名爲function('ui', {foo: bar, callback: callbackfn})的函數。我想傳遞的函數是一個When.js的承諾。如何從when.js承諾中乾淨地提取回調?

我拿出最好的:

var d = when.defer(); 
var p = when(d); 
var q = p.then(function() { 
    return loadItem(newCatalogItem, name, fileOrUrl); 
}); 

ConfirmationMessage.open('ui', { callback: d.resolve }); 

return q; 

這工作(使用推遲,以防止立即執行,然後傳遞resolve功能回調),但似乎有點令人費解。

有沒有更清潔的方法?

+0

「*功能是一個承諾*」沒有多大意義。你的意思是你有一個功能的承諾? – Bergi

+0

ConfirmationMessage.open是否使用帶有錯誤參數的節點回調約定?或者你真的想在每種情況下滿足? – Bergi

+0

它或者調用沒有參數的回調(成功),或者它不調用回調。 –

回答

1

我想你只想promisifyConfirmationMessage.open方法(另見when.js文檔herethere),然後使用它像一個承諾的功能,鏈接then調用到它。

爲了您的具體的例子,這可能是(使用便攜式承諾構造函數):

return when.promise(function(resolve) { 
    ConfirmationMessage.open('ui', { callback: resolve }); 
}).then(function(confirmResult) { 
    return loadItem(newCatalogItem, name, fileOrUrl); 
}); 
+0

好的,很好。不幸的是堅持使用when.js 1.7.1(沒有'when.promise()'),但這有助於更乾淨地構造它,無論如何。 –