解析云代码上for循环的奇怪和令人惊讶的行为。

时间:2014-08-14 08:13:55

标签: javascript for-loop parse-platform cloud

我在解析云代码上运行一个非常基本的hello world代码。我在云代码中放了一个简单的for循环,只是为了跟踪写了一个console.log并打印了' i'的值。这就是它的样子..

// Use Parse.Cloud.define to define as many cloud functions as you want.
// For example:
Parse.Cloud.define("hello", function(request, response) {
   for(var i = 0;i<5;i++)
    {
      console.log("Count : " + i);
    }
response.success("Hello world!");
});

理想情况下它应该按顺序打印计数..但是我的日志中的输出是这样的......

I2014-08-14T08:06:39.751Z] v9: Ran cloud function hello with:
  Input: {}
  Result: Hello world!
I2014-08-14T08:06:39.767Z] Count : 2
I2014-08-14T08:06:39.769Z] Count : 1
I2014-08-14T08:06:39.770Z] Count : 4
I2014-08-14T08:06:39.771Z] Count : 3
I2014-08-14T08:06:39.781Z] Count : 0

我需要在循环中为我的实现调用一个函数。但它不能正常工作。 for循环是否有问题,或者是否有一些不同的方法在解析云代码中实现for循环。我很无能为力。请帮我解决这个问题。提前致谢。

1 个答案:

答案 0 :(得分:1)

没有错。您只是看到Parse.com CloudCode和您将遇到的几乎所有JavaScript异步运行的事实。

console.log不会立即打印到控制台,就像某些代码会在本地系统的shell中运行一样。它更像是对系统说'#34;请尽快打印此console.log消息&#34;它会在执行时由系统决定。所有你知道的是它会在某个时候发生。

记录并不重要(而且Parse.com控制台很糟糕)所以没有办法控制这种行为,但对于排序很重要的操作,你可以在操作完成时获得回调为了安排你的下一次行动。 E.g。

console.log("Count : 0", { success: function() {
    console.log("Count : 1", { success: function() {
            console.log("Count : 2", { success: function() {
        }); 
    }); 
}); 

请注意,这只是一个示例 - 您无法实际运行该代码,因为console.log不支持回调。查看Parse.Query。

代码可能会变得有点麻烦并且过度缩进,因此当您进一步深入了解时,您应该开始学习如何使用promises。见Parse.Promise。