Javascript:解决在Parse.com中推送数组的异步循环
Javascript: Solving the asynchronous loop to push an array in Parse.com
我想从将对象推入数组的循环中获得最终结果。我从 console.log 知道所有结果都进入数组,但我无法从双循环中得到我想要的数组以用于任何事情。我知道您可以使用回调或承诺,我将采用任一解决方案(已安装 Parse Promises)。
代码:
var arrayNames = {key: val}
var val = {k: v, k1: v, k2: v}
var array = [];
var find= function(arrayNames) {
_.mapObject(arrayNames, function (val, key) {
_.mapObject(val, function (v, k) {
var person = Parse.Object.extend("People");
var query = new Parse.Query(person);
query.equalTo("name", k);
query.find({
success: function (row) {
var rowsToUpdate = _.uniq(row);
array.push(rowsToUpdate);
console.log(array);
}
})
})
})
}
var newfunc = function(array){
//Do Something with the array that's full of the results from find();
}
你不能通过一些简单的重构来实现吗?
var newfunc = function(callback){
console.log(callback);//this is now a bunch of arrays in
//my console log instead of a single one
}
var arrayNames = {key: val}
var val = {k: v, k1: v, k2: v}
var array = [];
// move 'newfunc' declaration to be above 'find'
var newfunc = function(array){
//Do Something with the array that's full of the results from find();
console.log(array);
}
var find= function(arrayNames) {
_.mapObject(arrayNames, function (val, key) {
_.mapObject(val, function (v, k) {
var person = Parse.Object.extend("People");
var query = new Parse.Query(person);
query.equalTo("name", k);
query.find({
success: function (row) {
var rowsToUpdate = _.uniq(row);
array.push(rowsToUpdate);
console.log(array);
// "callback" to 'newfunc' passing in the success results
newfunc(array);
}
})
})
})
}
通过将 newfunc
移动到 find
函数上方,我们确保它首先定义并准备好在 find
函数执行时运行
然后我们在 success
回调
中使用执行 newfunc
您需要使用 query.find()
返回的承诺。
假设嵌套的 _.mapObject()
调用是正确的,那么这样的事情应该有效:
var find = function(arrayNames) {
var promises = [];
_.mapObject(arrayNames, function (val, key) {
_.mapObject(val, function (v, k) {
var query = new Parse.Query(Parse.Object.extend("People"));
query.equalTo("name", k);
promises.push(query.find());
});
});
return Parse.when(promises).then(function() {
newfunc(_.uniq([].slice.call(arguments)));
});
}
我不认为 _.mapObject()
是这里最好的方法,但如果可行的话...
我想从将对象推入数组的循环中获得最终结果。我从 console.log 知道所有结果都进入数组,但我无法从双循环中得到我想要的数组以用于任何事情。我知道您可以使用回调或承诺,我将采用任一解决方案(已安装 Parse Promises)。
代码:
var arrayNames = {key: val}
var val = {k: v, k1: v, k2: v}
var array = [];
var find= function(arrayNames) {
_.mapObject(arrayNames, function (val, key) {
_.mapObject(val, function (v, k) {
var person = Parse.Object.extend("People");
var query = new Parse.Query(person);
query.equalTo("name", k);
query.find({
success: function (row) {
var rowsToUpdate = _.uniq(row);
array.push(rowsToUpdate);
console.log(array);
}
})
})
})
}
var newfunc = function(array){
//Do Something with the array that's full of the results from find();
}
你不能通过一些简单的重构来实现吗?
var newfunc = function(callback){
console.log(callback);//this is now a bunch of arrays in
//my console log instead of a single one
}
var arrayNames = {key: val}
var val = {k: v, k1: v, k2: v}
var array = [];
// move 'newfunc' declaration to be above 'find'
var newfunc = function(array){
//Do Something with the array that's full of the results from find();
console.log(array);
}
var find= function(arrayNames) {
_.mapObject(arrayNames, function (val, key) {
_.mapObject(val, function (v, k) {
var person = Parse.Object.extend("People");
var query = new Parse.Query(person);
query.equalTo("name", k);
query.find({
success: function (row) {
var rowsToUpdate = _.uniq(row);
array.push(rowsToUpdate);
console.log(array);
// "callback" to 'newfunc' passing in the success results
newfunc(array);
}
})
})
})
}
通过将 newfunc
移动到 find
函数上方,我们确保它首先定义并准备好在 find
函数执行时运行
然后我们在 success
回调
newfunc
您需要使用 query.find()
返回的承诺。
假设嵌套的 _.mapObject()
调用是正确的,那么这样的事情应该有效:
var find = function(arrayNames) {
var promises = [];
_.mapObject(arrayNames, function (val, key) {
_.mapObject(val, function (v, k) {
var query = new Parse.Query(Parse.Object.extend("People"));
query.equalTo("name", k);
promises.push(query.find());
});
});
return Parse.when(promises).then(function() {
newfunc(_.uniq([].slice.call(arguments)));
});
}
我不认为 _.mapObject()
是这里最好的方法,但如果可行的话...