我保存了三个结果,但它们都是一样的。我遇到了异步循环问题。我该怎么摆脱这一切?
我的代码:
var teamMatch = function(){
var Pairingteam = [];
var promise = Parse.Promise.as();
var x = matchedPairingIds.length;
while (x--) {
var match = matchedPairingIds[x];
var matching = function () {
matched.set("team", {
__type: "Pointer",
className: "_User",
objectId: "yCDDEWoiwM"
});
matched.set("Pairing", {
__type: "Pointer",
className: "Pairing",
objectId: match
});
Pairingteam.push(matched.save());
}
}
promise.then(function(){
return Parse.Promise.when(Pairingteam);
});
}
teamMatch();发布于 2015-03-19 22:29:51
错误是我把同班同学吊起来了。匹配需要在循环中定义。代码应该如下所示:
var teamMatch = function(){
var Pairingteam = [];
var promise = Parse.Promise.as();
var x = matchedPairingIds.length;
while (x--) {
var matched = new Parse.Object("Matched"); //THIS IS THE MISSING PIECE
var match = matchedPairingIds[x];
var matching = function () {
matched.set("team", {
__type: "Pointer",
className: "_User",
objectId: "yCDDEWoiwM"
});
matched.set("Pairing", {
__type: "Pointer",
className: "Pairing",
objectId: match
});
Pairingteam.push(matched.save());
}
}
promise.then(function(){
return Parse.Promise.when(Pairingteam);
});
}
teamMatch();发布于 2015-03-17 12:48:00
问题是matched.save();是一个异步操作。很可能您的函数在所有保存完成之前返回。要克服这个问题,最好的办法就是使用承诺。在这里读一读:guide#promises
然后看看Parse JavaScript SDK and Promise Chaining和Multiple Queries Parse Javascript
将上述解决方案应用于您的问题如下:
var partnerMatch = function() {
var savePromises = []; // this will collect save promises
// Create a trivial resolved promise as a base case.
var promise = Parse.Promise.as();
var x = matchArray.length // x = 3
while (x--) {
var matched = matchArray[x];
var matching = function() {
matched.set("partner", {
__type: "Pointer",
className: "_User",
objectId: "yCDDEWoiwM"
});
matched.set("match", match);
savePromises.push(matched.save());
}
}
promise.then(function(){
// now do the saves
return Parse.Promise.when(savePromises);
});
}
partnerMatch();Promise.When();等待直到传递给它的所有承诺都被解析。
编辑
我不知道matched变量是从哪里来的,但是下面是更新的代码
var teamMatch = function(){
var Pairingteam = [];
var promise = Parse.Promise.as();
var x = matchedPairingIds.length;
while (x--) {
var match = matchedPairingIds[x];
matched.set("team", {
__type: "Pointer",
className: "_User",
objectId: "yCDDEWoiwM"
});
matched.set("Pairing", {
__type: "Pointer",
className: "Pairing",
objectId: match
});
Pairingteam.push(matched.save());
}
promise.then(function(){
return Parse.Promise.when(Pairingteam);
});
}
teamMatch();https://stackoverflow.com/questions/29097809
复制相似问题