gpt4 book ai didi

javascript - webOS 编程中相互依赖的回调

转载 作者:行者123 更新时间:2023-11-30 13:41:18 26 4
gpt4 key购买 nike

这是一个概念性的问题。

webOS 中发生的许多操作都是异步的。我以前做过 Ajax 编程,但感觉 webOS 把它提升到了一个新的水平。以下面的应用程序示例从 Web 检索新闻文章列表,并将文章本地缓存在 HTML5 存储数据库中:

function FirstAssistant() {
}

FirstAssistant.prototype.setup = function() {
this.controller.setupWidget('articleList',
this.attributes = { itemTemplate: "article" },
this.model = {}
);

this.db = openDatabase("FooArticles", "1.0");
};

FirstAssistant.prototype.activate = function() {
this.db.transaction(function(transaction){
transaction.executeSql(
"CREATE TABLE IF NOT EXISTS 'articles' (name TEXT, favorite INTEGER DEFAULT 0)",
[], this.successHandler.bind(this), this.errorHandler.bind(this)
);
});

this.fetchArticles();
};

FirstAssistant.prototype.successHandler = function(transaction, results) {
// SELECT from 'articles' to populate this.model
};

FirstAssistant.prototype.errorHandler = function(transaction, results) {
// whatever
};

FirstAssistant.prototype.fetchArticles = function() {
var request = new Ajax.Request(url, {
method: 'get',
onSuccess: this.fetchArticlesSuccess.bind(this),
onError: this.fetchArticlesError.bind(this)
});
};

FirstAssistant.prototype.fetchArticlesSuccess = function(request) {
// populate this.model with new articles
};

FirstAssistant.prototype.fetchArticlesError = function(request) {
// whatever
};

因此,因为一切都是异步的,我们试图在从网络上获取新文章的同时创建数据库并读取缓存的文章。因为一切都是通过回调完成的,所以我对先发生的事情没有信心。数据库知道哪些文章已被标记为“收藏夹”,但根据执行速度,this.model 可能为空(因为数据库回调首先执行)或者它可能包含项目(因为 AJAX 首先返回)。因此,每个回调都需要能够填充列表或迭代列表并进行更新。

我当前的项目增加了另一层复杂性,因为我正在使用 FilterList,将另一个回调和模型添加到组合中。

将其浓缩为问题:

  1. JavaScript 是异步的,但是否只有一个执行线程?我是否需要担心同时编辑 this.model 的两个函数?
  2. 处理相互依赖的异步操作的常用方法有哪些? (即防止 this.model 中的重复,其中两个来源可能具有模型的重叠数据)

最佳答案

作为我自己问题的答案,我现在看到了 Mojo.Function.Synchronize :

Instances of this class are used to ensure a set of callback functions are all called at the same time. After creating, use the wrap() method to wrap any callbacks you wish to synchronize before passing them to an asynchronous service. The synchronize object will defer calling any of them until all of the returned wrappers have been called.

关于javascript - webOS 编程中相互依赖的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com