我在Ember DS.Store中有两种类型的记录:用户和位置。 (事实上我有更多,但为了简单起见)。
现在要获取所有条目,例如'用户',我只会这样做
this.store.find('user')
现在说我有一个变量allResults,我将它分配给这个命令。
allResults = this.store.find('user')
这给了我Ember调用promiseArray的内容,并在这个promise数组加载后做任何事情我只是
allResults.then(successfunction(), failurefunction())
现在,当我只需要一种类型的记录时,这很有用 - 比如我只需要用户,我可以轻松地将我的successfunction()称为第一个参数。
然而,我的需求超出了这个范围:我基本上构建了一个搜索这些记录的搜索栏,所以如果有人输入" mary",它需要向用户显示" Mary&# 34;和位置" mary Ave"例如。)
所以我需要
的综合结果this.store.find('user')
&安培;
this.store.find('location')
因此,以下是我的问题:[我觉得他们中的任何一个都可行。]
有没有办法可以获取与用户'相关的所有数据?和' location'让它作为一个光荣的承诺回归?这似乎也是处理这个问题的最佳方式。
你能连接两个promiseArrays来制作一个更大的promiseArrays,然后使用.then函数来获取更大的一个吗?如果是这样,怎么样?
答案 0 :(得分:1)
你可以结合承诺。
http://emberjs.com/api/classes/Ember.RSVP.Promise.html
这样的事情对你有用:
var bothPromise = Promise.all([
store.find('user'),
store.find('location')
]).then(function(values){
//merge the values arrays
var all = Em.A();
all.addObjects(values[0]); //users
all.addObjects(values[1]); //locations
return all;
});
bothPromise.then(function(allObjects){...
请参阅此承诺库中名为Q的“组合”部分,以获取有关组合承诺的其他说明。