我正在使用使用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
并不代表一个尚未知晓的值。
有没有办法做出一个可以解决价值的承诺呢?
答案 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);
});