【问题标题】:Going crazy with async calls in TitaniumTitanium 中的异步调用变得疯狂
【发布时间】:2015-02-01 11:35:59
【问题描述】:

花了 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 命令中使用异步,但结果相同。

问题出在哪里?我想我在 _.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(最后一个)

【问题讨论】:

    标签: javascript asynchronous titanium


    【解决方案1】:

    这是 ACS 中的一个错误。反正现在没关系,因为5年前就修好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2015-03-25
      相关资源
      最近更新 更多