如何创建一个解析为一个版本的javascript承诺?

Cam*_*tin 4 javascript promise

我正在使用promises 与faye浏览器客户端一起工作,我有一个函数可以在做异步操作后创建一个faye客户端,如下所示:

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

我想这样使用它:

fayeClient().then(function(faye_client) {
  // do something with faye_client
});
Run Code Online (Sandbox Code Playgroud)

问题是,faye_client这也是一个可靠的,这意味着通过fayeClient解析返回到faye_client"解析" 的值返回的承诺.但是,我希望承诺直接解决faye_client.

我甚至无法手动将值包装在promise中Promise.resolve(faye_client);,因为使用了相同的promise解析过程.

我认为这可能表明在faye方面滥用了那些人,因为faye_client这并不代表一个尚未知晓的价值.

有没有办法做出一个可以解决价值的承诺?

Ben*_*aum 6

而不是faye_client直接将其包装在一个对象中.这很丑陋,但它是A +承诺的唯一选择:

return {client: faye_client}; // no longer a thenable
Run Code Online (Sandbox Code Playgroud)

一些替代的承诺实现暴露了一个不会递归同化的.then或.chain但老实说我会避免这些.