在钛中对异步调用发疯
Going crazy with async calls in Titanium
在花了 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);
始终显示相同的用户,这意味着为同一用户保存所有值(在数据库中签入,都是同一用户),而不是每个用户 1 个值。
我还尝试在 _.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(最后一个)
这是ACS中的一个错误。无论如何,目前这并不重要,因为 5 年前就修复了。
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 如何在单击复选框后调用控制器方法
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 使用Google Visualization动态调用构造函数
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 调用函数内部的函数
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- 在钛中对异步调用发疯
- 异步递归调用让我发疯