带解析保存和反同步循环的Javascript
我保存了三个结果,但它们都是一样的。我遇到了dam Javascript异步循环问题。我怎样才能摆脱这一切 我的代码:带解析保存和反同步循环的Javascript,javascript,loops,pointers,parse-platform,Javascript,Loops,Pointers,Parse Platform,我保存了三个结果,但它们都是一样的。我遇到了dam Javascript异步循环问题。我怎样才能摆脱这一切 我的代码: var teamMatch = function(){ var Pairingteam = []; var promise = Parse.Promise.as(); var x = matchedPairingIds.length; while (x--) { var match = matchedPairingId
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();
问题是
匹配了.save()代码>是一个异步操作。最有可能的情况是,您的函数在所有保存完成之前返回。要克服这一点,最好的办法是使用承诺。请在此阅读:
然后看一看
根据您的问题调整上述解决方案如下:
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();
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();
承诺。什么时候;等待,直到传递给它的所有承诺都得到解决
编辑
我不确定您的匹配的变量来自哪里,但这里是更新的代码
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();
我犯的错误是我举起了匹配的班级。需要在循环中定义匹配的。代码应该如下所示:
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();
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();
关于我把它放在哪里或如何实现的一些额外细节?你是说“那么”吗?我熟悉“then”,但不知道在这种情况下如何实现它。我在查承诺。什么时候;我肯定会得到承诺,其中有3个是我从你提议的SavePromissions数组中期望得到的。不幸的是,它仍然只保存这些值中的一个。更新为包含base promise解析SDK是完全无用的。我看到了其他的插图,它们有些启发性,但我没有把这些点联系起来。Promise.when()是一个很好的小技巧,但是您展示的示例和您提供的示例中所示的示例在数组中保存了3个相同的对象,并且只保存了一个parse对象,而不是3个唯一的parse.Objects。好吧,感觉我越来越近了,但现在在数组中没有得到任何结果。我在想也许我需要调用匹配();功能?我感谢这里的指导。请多走一步好吗?