如何了解Google AppEngine数据存储区的操作已完成

时间:2012-05-18 10:47:38

标签: google-app-engine gwt

我执行方法Datastore.delete(key)构成我的GWT Web应用程序,AsyncCallback调用onSuccess()方法。我立即刷新http://localhost:8888/_ah/admin,我想要删除的实体仍然存在。 Smilar to,我立即刷新我的GWT Web应用程序,我打算删除的项目仍显示在网页上。注意onSuccess()已被调用。

那么,我怎么知道实体已经删除了什么?

 public void deleteALocation(int removedIndex,String symbol ){
    if(Window.confirm("Sure ?")){
        System.out.println("XXXXXX  " +symbol);
        loCalservice.deletoALocation(symbol, callback_delete_location);
    }

}
public AsyncCallback<String> callback_delete_location = new AsyncCallback<String>() {      

    public void onFailure(Throwable caught) {
        Window.alert(caught.getMessage());
    }

    public void onSuccess(String result) {
        // TODO Auto-generated method stub
        int removedIndex = ArryList_Location.indexOf(result);
        ArryList_Location.remove(removedIndex);
        LocationTable.removeRow(removedIndex + 1);
        //Window.alert(result+"!!!");
    }
};

服务员:

public String deletoALocation(String name) {
    // TODO Auto-generated method stub
    Transaction tx = Datastore.beginTransaction();
    Key key = Datastore.createKey(Location.class,name);
    Datastore.delete(tx,key); 
    tx.commit();
    return name;
}

抱歉,我不擅长英语: - )

2 个答案:

答案 0 :(得分:0)

根据docs

  

返回Key对象(如果给出了一个模型实例)或Key对象列表(如果给出了一个实例列表),它们与存储的模型实例相对应。

如果您需要一个有效的删除功能示例,可能会help。第108行

class DeletePost(BaseHandler):

def get(self, post_id):
    iden = int(post_id)
    post = db.get(db.Key.from_path('Posts', iden))
    db.delete(post)
    return webapp2.redirect('/')        

答案 1 :(得分:0)

如何检查实体的存在?通过查询?

HRD上的查询为eventually consistent,这意味着如果您添加/删除/更改实体,则会立即查询它,您可能看不到更改。原因是当您编写(或删除)实体时,GAE异步更新索引和实体in several phases。由于这需要一些时间,因此您可能不会立即看到更改。

链接文章讨论了缓解此限制的方法。