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

时间:2014-07-30 03:37:50

标签: javascript promise

我正在使用使用promises的faye browser client,并且我有一个函数可以在执行异步操作后创建一个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也是 thenable ,这意味着fayeClient返回的承诺会解析为faye_client'解析'的值。 但是,我希望承诺直接解析为faye_client

我甚至无法使用Promise.resolve(faye_client);手动将值包装到承诺中,因为使用了相同的promise resolution procedure

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

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

2 个答案:

答案 0 :(得分:6)

而不是将faye_client直接包装在对象中。这很难看,但这是A +承诺的唯一选择:

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

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

答案 1 :(得分:0)

如果您使用new Promise构造函数来解决承诺怎么办?

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