【问题标题】:Can jQuery promises be chained with Ember.RSVP.Promise's?jQuery 承诺可以与 Ember.RSVP.Promise 链接吗?
【发布时间】:2013-09-15 01:32:41
【问题描述】:

我需要帮助来理解一些承诺逻辑。这就是我想要实现的目标 - 使用 jQuery 我发出 get 请求,然后我用我的 promise 将它链接起来,这会进行一些检查,我的代码:

http://jsbin.com/UVEpurU/1/edit

function checkInfoPromise(r) {
    var ok = true,
        promise = Ember.RSVP.Promise(function(resolve, reject) {
        if(ok) {
            return resolve(r);
        }
        else {
            return reject(r);
        }
        });
    return promise;
}

var requestPromise = $.get('/')
.then(function(r){
    return checkInfoPromise(r);
});

requestPromise.then(function(r) {
    console.log(r);
}).fail(function(r) {
    console.log('fail');
});

它并没有像我预期的那样工作。文档说它们应该可以相互正常工作,但它们不能正常工作,或者我的代码不正确。

与 jQuery+jQuery 相同的逻辑可以正常工作:

http://jsbin.com/AYeyaxO/1/edit

Ember+Ember 有效:

http://jsbin.com/iMUgiDo/1/edit

【问题讨论】:

  • 你的第一个例子对我有用;)
  • 它是否在控制台中打印 html?就我而言,它会打印一些 javascript 内容。
  • 我的错,它打印的是 promise 本身而不是 html D:

标签: jquery ember.js promise


【解决方案1】:

我不认为这两个 Promise 实现是可链接的。您可能希望将 jquery 承诺包装在 Ember 承诺中。

var requestPromise = new Ember.RSVP.Promise(function(resolve, reject) {
    $.get("/", resolve).fail(reject);
});

JSBin : http://jsbin.com/Ikubiju/1/edit?html,js,console

【讨论】:

  • 澄清一下,查看$.Deferred's source 似乎它对链式promise 的检查包括它是否是另一个具有“promise”方法的对象——因此它不会识别Ember.RSVP.Promise 对象。所以不,你不能把这两个锁起来,因为我今天早上也痛苦地发现了。
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
相关资源
最近更新 更多