gpt4 book ai didi

javascript - 使用返回的 promise 数据

转载 作者:行者123 更新时间:2023-12-03 11:36:18 26 4
gpt4 key购买 nike

我有这样的东西:

App.IndexController = Ember.ObjectController.extend({
results : function(){

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

Ember.$.getJSON('/search').then(function(res){
console.log('response data is: ', res);
resolve(res)
})

})

}.property(),
...
})

// data
$.mockjax({
url: '/search',
responseText : {
type: 'different people',
res: [
{name: 'charlie', age: '55'},
{name: 'bobby', age: '19'},
{name: 'raymond', age: '39'}
]
}
})

my jsbin

我如何实际使用返回的数据?目前,results 返回一个 promise ( this.get('results') ),因此我无法在我的 hbs 模板中使用它。我需要将其转换为对象然后返回该对象吗?

最佳答案

回答问题

Ember 内部使用 PromiseProxyMixin神奇地兑现我们所了解和喜爱的 promise 。这是使用 PromiseProxy 进行更新的 JSBin:

http://emberjs.jsbin.com/danazu/edit?html,js,output

您的结果属性变为:

results: Ember.computed.promise(function(resolve, reject) {
Ember.$.getJSON('/search').then(function(res) {
console.log('response data is: ', res);
return resolve(res);
});
})

但是我不推荐这样做。看看this discourse thread获取一些有关您可能不想这样做的原因的信息。简而言之,处理所有不同状态的 Promise 会很笨重。

寻找更好的方法

路由器是处理 AJAX 请求 promise 的完美场所。一定有某种原因导致您不只是在 modelafterModel Hook 中将这些数据加载到路由器中。您可以创建另一个嵌套资源来表示这些搜索结果,然后链接该资源吗?

在您的路由器中:

Router.map(function() {
this.resource('search', { path: '/search/:term' });
});

App.PeopleRoute = Ember.Route.extend({
model: function(params) {
return Ember.$.getJSON('/search?term=' + params.term);
}
});

如果这不起作用,至少你可以:

  1. 当您需要搜索结果时发送操作
  2. 在 Controller 中处理 AJAX 请求
  3. 解析后在 Controller 上设置结果

关于javascript - 使用返回的 promise 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26495947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com