根据我的理解,有三种方法可以调用异步代码:
request.on("event", callback);fs.open(path, flags, mode, callback);我找到了一个承诺库https://github.com/kriszyp/node-promise,但我没有得到它.
有人可以解释一下什么是承诺,为什么我应该使用它?
另外,为什么它从Node.js中删除了?
我的nodejs应用程序中有一个名为get_source_at的函数.它需要一个uri作为参数,其目的是从该uri返回源代码.我的问题是我不知道如何使函数同步调用请求,而不是给它回调函数.我希望控制流停止加载uri所需的几秒钟.我怎样才能做到这一点?
function get_source_at(uri){
var source;
request({ uri:uri}, function (error, response, body) {
console.log(body);
});
return source;
}
Run Code Online (Sandbox Code Playgroud)
此外,我已经阅读过关于'事件'以及节点是如何'偶像'的,我应该在编写代码时尊重它.我很高兴这样做,但我必须有一种方法来确保我在继续我的应用程序的控制流之前从uri获得源代码 - 所以如果不是通过使函数同步,那怎么办呢? ?
我正在使用express-ws https://www.npmjs.com/package/express-ws(有助于为express和websocket客户端创建服务器的API).
app.ws('/', function(ws, req) {
console.log("New connection")
if (content.length > 0) {
console.log(content)
ws.send(content)
}
ws.on('message', function(msg, flags) {
console.log("Received "+ msg);
});
ws.on('data', function(msg, flags) {
var data = []; // List of Buffer objects
res.on("data", function(chunk) {
data.push(chunk); // Append Buffer object
console.log(data)
})
})
});
Run Code Online (Sandbox Code Playgroud)
现在您可以看到上面的代码,无论何时创建连接,它都会检查内容的长度,并在超过0时向客户端发送conetent.
遵循路由器代码,在Web请求上更新文件.如果在连接创建后的某个时间(如果此文件被修改),此连接不知道它,因此不会调用此函数,因此不会调用send函数.我也试过fs.watch但是我无法让它工作.
router.post('/run_restart', function(req, res, next) {
text = '{"to_do": "run_test", "devices":"all", "argv": { "test": "' + req.body.cmd + '", "cycles": "' + req.body.cycles + '", "awake_for": "' + req.body.wt …Run Code Online (Sandbox Code Playgroud)