>我必须使用几乎相同的代码在节点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));
});
您应该使用 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!'));