如果钛宁静的API调用失败怎么办?

时间:2014-05-19 13:23:49

标签: javascript rest backbone.js titanium-mobile

目前,我显示一条警告,通知用户API调用失败。但是,有些情况下我需要API调用才能成功,否则数据完整性会受到影响。

//key press changed

    $.txtNick.addEventListener('return', function(e) {

        //create a collection
        var usersCollection = Alloy.Collections.user;

        var tempJSON = {};
        usersCollection.fetch({

            success : function() {

                var getModel = usersCollection.where(checkFBAccountIdJSON);

                for (var i in getModel) {

                    //update local model
                    getModel[i].set('nickname', $.txtNick.value);
                    //save changes
                    getModel[i].save();

                }

                console.log(usersCollection.toJSON());

                tempJSON = usersCollection.toJSON();
                //post to API

                if (Titanium.Network.online) {

                    //console.log(tempJSON);

                    apiHelper.APIPostRequest(Alloy.GlobalsAPI + '/user', tempJSON, function(e) {
                        var status = this.status;
                        if (status == 200) {

                            console.log('nickname posted');


                        }
                    }, function(err) {

                        alert('Unknown error from api');
                    });

                } else {
                    alert('No internet connection found');
                }

            },
            error : function() {
                // something is wrong..
            }
        });
        //end

    });

在这种情况下,如果有人更改了他们的昵称,首先更新本地模型,然后将模型中更新的对象发送到服务器。我将来可能遇到的问题是,如果未成功进行对服务器的API调用,这意味着存储在服务器中的昵称与模型中存储的昵称已过时。

处理这类情况的最佳方法是什么?感谢

1 个答案:

答案 0 :(得分:0)

您有本地更新(模型)和远程更新(API)。有可能你总是可以在本地更新,而不是总是远程执行,所以,我的建议是:尝试通过你的API调用更新,如果成功,你在本地更新。如果API更新失败,请不要在本地更新。

这样你就可以原子地绑定两个操作(排序)。