据我了解,必须对NodeJS中的所有IO使用异步回调(?)
我正试图绕过微软提供的this example code。
他们以db.open(function(){})开头; 也就是说,在“open”的回调中没有提供代码..
因此,所有与db对象交互的代码都将在open完成之前执行。 他们的样本如何运作?
对于我自己的代码,为了能够将任何数据写入DB,我必须提供编写代码作为db.open函数的回调。
运行我的代码时出现另一个奇怪的问题,在写入数据之后,即使所有用户代码都已完成,nodejs服务器也不会退出。 那是为什么?
答案 0 :(得分:0)
我根本不知道Typescript,但通常是node.js术语:
>他们的样本如何运作?
在app.ts
import db = module("./db")
...
var app = express.createServer();
大概是,import命令会触发db.open(),而createServer()命令需要足够长的时间并且至少调用一次异步调用,这样db.open()总是会完成。
>即使所有用户代码都已完成,nodejs服务器也不会退出。那是为什么?
根据你的说法:
您正在使用db.open
您的应用程序正在运行“完成”,然后才进行回调 执行
两种可能性(因为不知道打字稿而无法评论): 1.通过使用回调,您在TypeScript无法处理的上下文中执行代码 2.你没有调用像res.end()或res.send()
这样的最终函数如果是这种情况,那么你必须要么摆脱db.open中的回调,而是在你的应用程序中使用setTimeout( myFunction, waitTime);
,或者找出TypeScript如何干净地包装自己并执行以下操作:
var self = this;
db.open( function() {
... // do all the computations you want
self.finalCleanup(); // tell typescript you're done
}