
我看到别人的提问里面
var express = require('express'); var app = express(); app.get('/some/route', (req, res)=> { res.json({success: false, message: "End time must be AFTER start time"}); console.log('Hi') }); 这个 console.log('Hi')会被执行。现在我有一个需求,要用 @awaitjs/express 来 decorate express,代码大概如下
const express = require('express'); const { decorateApp } = require('@awaitjs/express'); const app = decorateApp(express()); const port = 3000; function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } app.getAsync('/toggle', async function(req, res){ let period = parseInt(req.query.period); let count = parseInt(req.query.count); res.json({success: true, message: "Power cycle schedueled successfuly for the interval of " + req.query.period + " minute(s), totaling " + req.query.count + " times."}); while(count-- > 0){ await do_something(); } }); await app.listen(port, () => console.log(`Example app listening on port ${port}!`)) 这个 res.json 后面的 while loop 是一个长时间执行的代码。我期望的是如前面第一个例子那样,在 res.json 返回客户端一个结果后继续执行 while loop。但是实际上这个 while loop 并不会运行,我哪里做的不对?
1 Hanggi 2019-08-09 13:06:38 +08:00 不太建议你用这个 awaitjs/express,感觉实现不是很好。 你这个程序,后面用 while await,那么这个长时间任务没做完之前,这个 api 应该不会返回,就挂在那里,直到做完。 是这样吗? 如果是的,那你这么实现就不对了,你应该是要这个接口返回成功,然后程序还在跑。 |