2015-09-20 20 views
1

下面是代碼示例。這是爲插件面板。Ember RSVP Promise for firefox addon port messaging scheme解決不了的模型

路由器承諾不會從全局列表器內部解析,儘管它可以與普通的ajax請求一起工作。

import Ember from 'ember'; 

export default Ember.Route.extend({ 


    model: function() { 
    return new Ember.RSVP.Promise(function(resolve, reject) { 

// This works 
Ember.$.ajax({ 
    url : "http://bla.com" 
    type: "POST" 
    }).then(function(response){ 
     resolve(response);; 
    }); 


// This doesn't work 
addon.port.on(url, function(status, response) { 
    resolve(response); 
}) 



    }); 
}); 

我在某處讀了這個可以用Ember.run.bind處理但無法讓它工作。

+0

它是否適用於不是來自Ember的異步函數(例如,本機XHR或'setTimeout)'? – Bergi

+0

可能不是。 來自http://stackoverflow.com/questions/20602692/ember-return-a-promise-from-beforemodel-not-working-with-qunit和http://stackoverflow.com/questions/22685055/rsvp-handling-超時與承諾 – Ritvick

回答

0

如果你Ember.run.join(this, resolve, response)能工作嗎?

addon.port.on(url, function(status, response) { 
    // just in case it doesn't work, add a log here to make sure your callback 
    // is actually being called. 
    console.log('got response'); 
    Ember.run.join(this, resolve, response); 
}); 

Ember.run.join將加入現有的運行循環或創建一個新的運行循環。

+0

它給我這個錯誤消息:TypeError:this.get(...)。toArray不是一個函數。 「響應」是回調中的數組[]。 – Ritvick

+0

看起來承諾不等待實現,因此模型沒有正確形成。有沒有一種方法可以告訴燼等待addon.port.on()上的消息? – Ritvick