我如何创建一个javascript承诺,它解析为一个then

How do I create a javascript promise which resolves to a thenable?

本文关键字:一个 then 承诺 何创建 javascript 创建      更新时间:2023-09-26

我正在使用承诺与faye浏览器客户端一起工作,并且我有一个函数,在执行异步操作后创建faye客户端,如下所示:

function fayeClient() {
  return doSomethingAsychronous().then(function() {
    var faye_client = new Faye.Client('http://localhost/faye');
    return faye_client;
  });
}

,我想这样使用它:

fayeClient().then(function(faye_client) {
  // do something with faye_client
});

问题是,faye_client也是然后,这意味着fayeClient返回的承诺解析为faye_client"解析"到的值。但是,我希望承诺直接解决到faye_client

我甚至不能使用Promise.resolve(faye_client);手动包装承诺中的值,因为使用了相同的承诺解析过程。

我认为这可能是faye误用了enable,因为faye_client不代表一个未知的值。

是否有任何方法可以使承诺解析为一个值,同时也是一个值?

不返回faye_client,直接将其包装在对象中。它很丑,但这是你对A+承诺的唯一选择:

return {client: faye_client}; // no longer a thenable

一些可选的承诺实现暴露了一个不能递归同化的。then或。chain,但老实说,我会避免这些。

如果使用new Promise构造函数来解析承诺呢?

return new Promise(function(resolve, reject) {
    resolve(faye_client);
});