我如何在WinJS队列异步函数调用
How do I queue asynchronous function calls in WinJS?
我正在使用SQLite3-WinRT用于我的WinJS项目,但最近遇到了一些查询可能会锁定数据库的问题。
快速而肮脏的方法是等待任意时间,然后再试一次(因为这是一个单用户应用程序)。
这样的查询示例如下:
var sql_query = "SELECT * FROM Table;";
SQLite3JS.openAsync(path_to_db)
.then(function (db) {
return db.runAsync(sql_query)
.then(function () {
db.close();
}, function (error) {
db.close();
console.log(error)
});
});
所以,基本上,我需要让异步调用等待轮到它们。如何做到这一点最好的约束,对数据库的访问必须看起来像上面的函数? 这是一个未经测试的重试逻辑实现。它最多重试numOfRetries
次,每次重试延迟delay
ms。
var doWorkAsync = function (numOfRetries, delay) {
var sql_query = "SELECT * FROM Table;";
SQLite3JS.openAsync(path_to_db)
.then(function (db) {
return WinJS.Promise(function (resolve, reject) {
var nextStep = function () {
db.runAsync(sql_query)
.then(function (result) {
db.close();
resolve(result);
}, function (error) {
if (--numOfRetries >= 0)
WinJS.Promise.timeout(delay).then(nextStep);
else
{
db.close();
console.log(error);
reject(new WinJS.ErrorFromName(error.name, error.message));
}
});
};
nextStep();
});
});
}
相关文章:
- esri javascript异步打印
- JavaScript异步问题
- $translateProvider.useStaticFilesLoader的Angular Translate异步定
- 如何处理node.js节点mongodb中的连接和查询队列
- 异步facebook功能
- 异步并行错误
- 在Redux中,我应该在哪里编写复杂的异步流
- 角度异步http自动完成
- 如何从SeleniumWebdriver获取异步Javascript响应
- 如何使用异步调用更改工厂的变量
- 在等待异步任务时永久循环
- 如何在异步函数中使用javascript对象
- 使用多个异步调用管理队列
- 异步队列挂起请求
- 如何检查异步执行的函数队列
- 如何在事件队列中进行异步jsonp调用
- 包含承诺的队列异步操作
- 当使用异步队列时,我应该使用回调吗?
- 串行地处理异步处理的消息队列
- 我如何在WinJS队列异步函数调用