我正在用Parse's Cloud Code编写一个函数,用5张扑克牌填充服务器。这个想法是,服务器应该等到所有5张卡片都在数据库中,然后才能进入功能的下一部分(目前它只是向控制台输出一条消息。)我的承诺是否按预期工作?
我所看到的是所有5卡被添加到数据库中,也并不一定出现在序列数据库中,这使我相信他们是正确的被异步补充说。而对于mostpart我的记录显示预期行为。
I2015-01-03T17:08:01.244Z] Attempting to create cards x5
I2015-01-03T17:08:01.245Z] Attempting to save card0
I2015-01-03T17:08:01.247Z] Attempting to save card1
I2015-01-03T17:08:01.248Z] Attempting to save card2
I2015-01-03T17:08:01.249Z] Attempting to save card3
I2015-01-03T17:08:01.250Z] Attempting to save card4
I2015-01-03T17:08:01.352Z] Card saved:4
I2015-01-03T17:08:01.353Z] Card saved:4
I2015-01-03T17:08:01.354Z] Card saved:4
I2015-01-03T17:08:01.355Z] Card saved:4
I2015-01-03T17:08:01.356Z] Card saved:4
I2015-01-03T17:08:01.357Z] ALL 5 Promises theoretically fulfilled
然而,请注意,当卡实际保存时,其中每个卡的日志都使用相同的编号 - 在此情况下,“卡已保存:4”。
问题是......我的承诺是否按预期工作?以及如何修复我的错误以显示已保存的实际卡号?
这里是我的代码:
Parse.Cloud.define("populateServer", function(request, response)
{
console.log("Attempting to create cards x5");
var promises = createCards(5);
Parse.Promise.when(promises).then(function(result)
{
console.log("ALL 5 Promises theoretically fulfilled");
});
});
function createCards(qty)
{
var promises = [];
for (i=0;i<qty;i++)
{
var Card = Parse.Object.extend("Card");
var card = new Card();
card.set("name", "test");
card.set("number", i);
console.log("Attempting to save card" +i);
var promise = card.save();
promises.push(promise);
promise.then(function() {
console.log("Card saved:" +i);
}, function(error) {
console.log("Uh oh, something went wrong.");
});
}
return promises;
}
谢谢!我不知道如何创建承诺链并在循环中使用它们,这非常有用! –