花了6个小时尝试不同的方法解决我的问题后,我总是得到同样的错误而无法找出原因。
问题很容易理解:我在Appcelerator Titanium ACS中保存了10个用户,我想创建10条记录,每个用户一条。
这些东西必须简单:所有用户都有相同的传递,所以我只需要登录每个用户,以用户身份创建对象,这就是全部!! (在ACS中,对象是由创建它们的用户拥有(并自动分配user_id)。
为了管理异步,我使用带回调的函数来等到最后。
var Cloud = require('ti.cloud');
function createObject(value, onComplete) {
Cloud.Objects.create({
classname: 'MyObj',
session_id: Cloud.sessionId,
fields: {
value: value
}
}, function(data) {
if (data.success) {
Ti.API.info('New value: user [' + data.Scores[0].user_id + '] - value: ' + data.Scores[0].value);
onComplete(true);
} else {
Ti.API.info('Error: ' + data.message);
onComplete(false);
}
});
}
function login(user, onComplete) {
Cloud.Users.login({
login: user.username,
password: '1234'
}, function(e) {
if (e.success) {
createObject(20, function(cb) {
onComplete(true);
});
} else {
Ti.API.warn('Error login user: ' + e.message);
onComplete(false);
}
});
}
// Get target users
Cloud.Users.query({
response_json_depth: 1
}, function(data) {
if (data.success) {
_.each(data.users, function(user) {
login(user, function(cb) {
Ti.API.warn("user: " + user.username);
});
});
}
});
嗯,我的结果总是一样的:
Ti.API.warn('user: ' + user.username);
显示正确的用户名(逐个),但Ti.API.info('New value: user [' + data.Scores[0].user_id + '] - value: ' + data.Scores[0].value);
始终显示相同的用户,这意味着为同一用户保存了所有值(在DB中检查,都是相同的用户),而不是每个用户1个值。
我也尝试在_.each命令中使用async,但结果相同。
问题出在哪里?我想我在_.each用户中等待登录,登录必须等待完成createObject,但似乎我做错了。
在这里退出。对我没有意义......:
New value: user [54cb62cf18beba0935422a35] - value: 20
user: krusty
New value: user [54cb62cf18beba0935422a35] - value: 20
user: apu
New value: user [54cb62cf18beba0935422a35] - value: 20
user: ned
注意:为所有呼叫保存的user_id对应于用户NED(最后一个)
答案 0 :(得分:0)
这是ACS中的错误。无论如何,这无关紧要,因为5年前已修复。