我循环遍历一个名为$scope.points
的对象数组,如下所示:
[
{"x": 200, "y": 200, "index": 0}
{"x": 200, "y": 200, "index": 1}
{"x": 200, "y": 200, "index": 2}
]
这是JS,它循环遍历$scope.points
并使用Parse保存它们:
var createPanodatas = function() {
console.log('POINTS:', $scope.points)
_.each($scope.points, function(point) {
console.log('INDEX:', point.index)
var Panodata = AV.Object.extend('PanoramaData'),
panodata = new Panodata()
var json = {
'index': point.index,
'x': point.x,
'y': point.y,
'roomModelId': $scope.pano.id
}
panodata.save(json, {
success: function(panodata) {
console.log('Panodata saved.')
},
error: function(panodata, error) {
console.log('Failed to create new pano object, with error message: ' + error.message)
}
})
})
}
保存的项目按日期排序,但随机索引:
[
{
"objectId": "56a1e3dc7db2a2005a15533a",
"index": 1,
"roomModelId": "56a1e3d72e958a00515cfe3e",
"createdAt": "2016-01-22T08:10:04.646Z"
},
{
"objectId": "56a1e3dcc24aa8005415772f",
"index": 0,
"roomModelId": "56a1e3d72e958a00515cfe3e",
"createdAt": "2016-01-22T08:10:04.646Z"
},
{
"objectId": "56a1e3dc816dfa005919182b",
"index": 2,
"roomModelId": "56a1e3d72e958a00515cfe3e",
"createdAt": "2016-01-22T08:10:04.670Z"
},
]
由于console.log('POINTS:', $scope.points)
以正确的索引顺序输出项目,因此让我很困惑:
还有console.log('INDEX:', point.index)
:
INDEX: 0
INDEX: 1
INDEX: 2
为什么用随机索引保存项目?如何按顺序保存索引? (例如0
,1
,2
...)?
答案 0 :(得分:1)
看起来这些项目保存得很好并且索引正确。
下划线_.each
函数将按照您的预期顺序遍历数组,这也将导致以相同的顺序创建PanoramaData
。
需要注意的关键信息是,使用Parse进行保存是一个 异步 进程,您无法保证哪个实际先完成。直观地说,你会期望首先执行的保存将首先履行他们的承诺,而且可能就是这种情况,但是你仍然无法做出任何保证。
在您的示例中似乎不是这种情况,因为数据似乎保存得很好,但如果 需要 知道它们已保存在与数组完全相同的顺序,您可以使用promise chaining,特别是serial promise chaining。
同样,看起来数据正确设置但创建时间引起了您的关注,因为在您的示例中索引1和0都是在2016-01-22T08:10:04.646Z
创建的。除非你有特定的用例,否则尽量不要过分依赖串行进程。