Javascript:在Parse.com中解决异步循环以推送数组
我想从一个循环中得到最终结果,在这个循环中,我将对象推入一个数组。我从console.log知道所有结果都进入了数组,但我无法从双循环中获得所需的数组以用于任何用途。我知道您可以使用回调或承诺,我将采用任何一种解决方案(安装了解析承诺) 守则:Javascript:在Parse.com中解决异步循环以推送数组,javascript,arrays,callback,promise,Javascript,Arrays,Callback,Promise,我想从一个循环中得到最终结果,在这个循环中,我将对象推入一个数组。我从console.log知道所有结果都进入了数组,但我无法从双循环中获得所需的数组以用于任何用途。我知道您可以使用回调或承诺,我将采用任何一种解决方案(安装了解析承诺) 守则: var arrayNames = {key: val} var val = {k: v, k1: v, k2: v} var array = []; var find= function(arrayNames) { _.mapObject(ar
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
函数时准备就绪
然后,我们使用execute
newfunc
作为success
回调中的函数,您需要处理query.find()返回的承诺
假设嵌套的\uuu0.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()
是这里最好的方法,但是如果它有效的话…实际上,这就是我在最近的迭代中使用的方法,我将对它进行编辑以反映这一点。当我将回拨数量记录在控制台日志中时,它会将每次推送到数组,而不是一个包含所有rowsToUpdate的单个数组。为了清楚起见,newfunc应该接收一个包含所有rowsToUpdate而不是要更新的“N”行的数组,调用newfunc“N”次。