Javascript 速率限制parse.com后台作业
我在parse.com中有一些数据需要通过后台作业更新。大约有100排。更新每一行使用3个解析api查询。每秒只允许我进行30次查询,因此每次运行作业时,只有前9行得到更新,而在这一秒访问系统的任何用户都会出错 有没有一种简单的方法可以在作业中设置暂停,使其在大约200毫秒后只更新一行,然后作业只使用可用查询的一半?这意味着作业将需要大约20秒的时间来运行,而不是仅仅一秒钟,但这是一个完全可以接受的折衷方案 代码的结构大致如下:Javascript 速率限制parse.com后台作业,javascript,parse-platform,Javascript,Parse Platform,我在parse.com中有一些数据需要通过后台作业更新。大约有100排。更新每一行使用3个解析api查询。每秒只允许我进行30次查询,因此每次运行作业时,只有前9行得到更新,而在这一秒访问系统的任何用户都会出错 有没有一种简单的方法可以在作业中设置暂停,使其在大约200毫秒后只更新一行,然后作业只使用可用查询的一半?这意味着作业将需要大约20秒的时间来运行,而不是仅仅一秒钟,但这是一个完全可以接受的折衷方案 代码的结构大致如下: Parse.Cloud.job("UpdateData", fun
Parse.Cloud.job("UpdateData", function (request, status) {
Parse.Cloud.useMasterKey();
(new Parse.Query("Table"))
.find()
.then(function (rows) {
rows.forEach(function (row) {
// Some queries happen here
...
row
.set(...)
.save();
});
status.success();
}, function (error) {
status.error();
});
});
我认为我不能在这段代码上轻易地使用
setTimeout
或setInterval
(我甚至不确定parse.com云代码是否允许使用它们)。JS不支持任何类似于sleep()
或wait()
的功能,我认为您的问题在于您正在以同步方式返回status.success()
,而不是等待代码循环完成
尝试此选项(从中修改):
我认为您的问题在于,您正在以同步方式返回
status.success()
,而不是等待代码循环完成
尝试此选项(从中修改):
我认为您的问题在于,您正在以同步方式返回
status.success()
,而不是等待代码循环完成
尝试此选项(从中修改):
我认为您的问题在于,您正在以同步方式返回
status.success()
,而不是等待代码循环完成
尝试此选项(从中修改):
尝试
Parse.Object.saveAll
一次保存所有对象,如果您需要forEach循环中的其他查询,还可以像@mbm29414所提到的那样将解析承诺连成一系列
下面的代码片段显示了使用Parse.object.saveAll
一次保存对象的简单示例:
Parse.Cloud.job("UpdateData", function (request, status) {
Parse.Cloud.useMasterKey();
(new Parse.Query("Table"))
.find()
.then(function (rows) {
var toSaveList = [];
var promise = new Parse.Promise();
rows.forEach(function (row) {
// Some queries happen here
...
row.set(...);
...
toSaveList.push(row)
});
Parse.Object.saveAll(toSaveList, function() {
promise.resolve();
}, function() {
promise.reject();
});
return promise;
})
.then(function() {
status.success();
}, function() {
status.error();
});
});
尝试
Parse.Object.saveAll
一次保存所有对象,如果您需要forEach循环中的其他查询,还可以像@mbm29414所提到的那样将解析承诺连成一系列
下面的代码片段显示了使用Parse.object.saveAll
一次保存对象的简单示例:
Parse.Cloud.job("UpdateData", function (request, status) {
Parse.Cloud.useMasterKey();
(new Parse.Query("Table"))
.find()
.then(function (rows) {
var toSaveList = [];
var promise = new Parse.Promise();
rows.forEach(function (row) {
// Some queries happen here
...
row.set(...);
...
toSaveList.push(row)
});
Parse.Object.saveAll(toSaveList, function() {
promise.resolve();
}, function() {
promise.reject();
});
return promise;
})
.then(function() {
status.success();
}, function() {
status.error();
});
});
尝试
Parse.Object.saveAll
一次保存所有对象,如果您需要forEach循环中的其他查询,还可以像@mbm29414所提到的那样将解析承诺连成一系列
下面的代码片段显示了使用Parse.object.saveAll
一次保存对象的简单示例:
Parse.Cloud.job("UpdateData", function (request, status) {
Parse.Cloud.useMasterKey();
(new Parse.Query("Table"))
.find()
.then(function (rows) {
var toSaveList = [];
var promise = new Parse.Promise();
rows.forEach(function (row) {
// Some queries happen here
...
row.set(...);
...
toSaveList.push(row)
});
Parse.Object.saveAll(toSaveList, function() {
promise.resolve();
}, function() {
promise.reject();
});
return promise;
})
.then(function() {
status.success();
}, function() {
status.error();
});
});
尝试
Parse.Object.saveAll
一次保存所有对象,如果您需要forEach循环中的其他查询,还可以像@mbm29414所提到的那样将解析承诺连成一系列
下面的代码片段显示了使用Parse.object.saveAll
一次保存对象的简单示例:
Parse.Cloud.job("UpdateData", function (request, status) {
Parse.Cloud.useMasterKey();
(new Parse.Query("Table"))
.find()
.then(function (rows) {
var toSaveList = [];
var promise = new Parse.Promise();
rows.forEach(function (row) {
// Some queries happen here
...
row.set(...);
...
toSaveList.push(row)
});
Parse.Object.saveAll(toSaveList, function() {
promise.resolve();
}, function() {
promise.reject();
});
return promise;
})
.then(function() {
status.success();
}, function() {
status.error();
});
});
你确定背景工作就是这样吗?我以为你每20req/sec有一个作业,作业上有其他限制,但不是req/sec限制。否则,上述情况将非常普遍。我不确定,如果这是为什么,但我的工作是查找168行,然后只更新前9行。你确定后台工作是这样工作的吗?我以为你每20req/sec有一个作业,作业上有其他限制,但不是req/sec限制。否则,上述情况将非常普遍。我不确定,如果这是为什么,但我的工作是查找168行,然后只更新前9行。你确定后台工作是这样工作的吗?我以为你每20req/sec有一个作业,作业上有其他限制,但不是req/sec限制。否则,上述情况将非常普遍。我不确定,如果这是为什么,但我的工作是查找168行,然后只更新前9行。你确定后台工作是这样工作的吗?我以为你每20req/sec有一个作业,作业上有其他限制,但不是req/sec限制。否则,上述情况将非常普遍。我不确定这是为什么,但我的工作是查找168行,然后只更新前9个。使用
saveAll
是一个好得多的主意-这是我现在实现的。使用saveAll
是一个好得多的主意-这是我现在实现的。使用saveAll
是一个好得多的主意-这是我现在实现的这就是我现在实现的。