【发布时间】:2015-09-15 05:39:48
【问题描述】:
我的问题是针对 Javascript 和异步操作的。我正在构建一个用于与数据库 (OrientDB) 交互的 Node.js API,并且我正在使用一个面向 Node 的包来提供基本的连接功能。其中一些函数如下所示:
db.delete("...")
db.insert("...")
etc.
他们每个人都返回一个可用于对结果采取行动的承诺:
db.insert("...").then(function(records) {
res.send(records);
});
我的目标是执行两个删除语句(顺序无关紧要),然后执行一个插入语句(必须在删除语句之后发生,否则我最终会删除插入的记录)。我可以简单地写以下内容吗:
db.delete("...");
db.delete("...");
db.insert("...");
换句话说,像Javascript这样的单线程环境中的异步操作的顺序是否保持不变??? 还是我需要做出某种承诺:
var promise = new Promise(function(resolve, reject) {
db.delete("thing to delete").then(handleFinish, reject);
db.delete("other thing to delete").then(handleFinish, reject);
var finished = false;
function handleFinish() {
if(finished){
resolve();
}
else {
finished = true;
}
}
});
然后
promise.then(function(){
db.insert("...");
});
或者有更好的选择来完成这个吗?我是 Node 新手,也是异步编程新手。
【问题讨论】:
-
这主要取决于您正在使用的
db实现。异步只是意味着他们在 JS 继续执行时做后台工作,而不是他们搞乱了他们的顺序。
标签: javascript node.js asynchronous