【问题标题】:How to cleanly extract a callback out of a when.js promise?如何从 when.js 承诺中干净地提取回调?
【发布时间】:2016-02-26 07:13:28
【问题描述】:

我需要将回调传递给签名为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;

这可行(使用 deferred 来防止立即执行,然后将 resolve 函数作为回调传递),但似乎有点复杂。

有没有更清洁的方法?

【问题讨论】:

  • 函数是一个承诺”没有多大意义。你的意思是你有一个功能的承诺?
  • ConfirmationMessage.open 是否使用带有错误参数的节点回调约定?还是您真的想在所有情况下都满足?
  • 它要么调用不带参数的回调(成功),要么不调用它。

标签: callback promise when-js


【解决方案1】:

我认为您只想使用 promisify 那个 ConfirmationMessage.open 方法(另请参阅 when.js 文档 herethere),然后像使用 promise 函数一样使用它,将 then 调用链接到它上面.

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

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

【讨论】:

  • 好的,很好。不幸的是,我坚持使用 when.js 1.7.1(没有 when.promise()),但这有助于更清晰地构建它。
猜你喜欢
  • 1970-01-01
  • 2016-04-02
  • 2019-09-18
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2017-04-26
  • 2016-06-15
  • 1970-01-01
相关资源
最近更新 更多