0

我需要将回调传递给签名为function('ui', {foo: bar, callback: callbackfn}). 我要传递的函数是一个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函数作为回调传递),但似乎有点令人费解。

有没有更清洁的方法?

4

1 回答 1

1

我认为您只想承诺ConfirmationMessage.open方法(另请参见此处此处的 when.js 文档),然后像使用承诺函数一样使用它,将then调用链接到它上面。

对于您的具体示例,可能是(使用可移植的 Promise 构造函数):

return when.promise(function(resolve) {
    ConfirmationMessage.open('ui', { callback: resolve });
}).then(function(confirmResult) {
    return loadItem(newCatalogItem, name, fileOrUrl);
});
于 2016-02-25T23:13:28.170 回答