我必须在节点js中使用几乎相同的代码进行路由。我想在函数中排除这个代码,但是当我调用函数时,进程(路由)不会等待新函数的返回var。也许有人可以为我创造一个例子,我怎么能处理它。我认为这就像回调和承诺。
最佳,
西蒙
带快递的伪示例。
function getUser(variable) {
return variable;
}
app.get('/user', function(req, res) {
res.json(getUser(a));
});
app.get('/users', function(req, res) {
res.json(getUser(b));
});
答案 0 :(得分:0)
在进程完成之前,您应该使用promise来阻止进一步执行。
为了演示目的,我使用setTimeout来保存进程,因此路由必须等待最少5000毫秒才能解析承诺。一旦承诺得到解决,我们将获得当时的值,最后使用res.json将响应返回给客户端。
const express = require('express')
const bodyParser = require('body-parser');
const app = express();
var port = process.env.PORT || 3000; //lets the port be set by Hero
app.use(bodyParser.json());
function getUser(variable) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(variable);
}, 5000);
});
}
app.get('/user', function (req, res) {
getUser("user-data").then((data) => {
res.status(200).json({data: data});
});
});
app.get('/info', function (req, res) {
getUser("info-data").then((data) => {
res.status(200).json({data: data});
});
});
app.listen(port, () => console.log('Example app listening on port 3000!'));