我有一个POST
API,里面有一些逻辑,如下所示:
app.post('/', async (req: Request, res: Response) => {
const tasksRequest = req.body as TasksRequest;
let tasks: Promise<any>[] = []
tasks = tasksRequest.tasks.map((t) => processTask(t, tasksRequest.configs));
await Promise.all(tasks);
});
下面是processTask
函数:
function processTask(task: Task, configs: Configs) {
return new Promise<void>((resolve, reject) => {
try {
const fileName = './output/' + task.tag + 's.json';
fetch(configs.Host + configs.APIsBasePrefix + task.parentResource + task.mostRelatedPath, {
method: 'GET'
}).then(result => {
result.json().then(jsonResult => {
fs.writeFile(fileName, JSON.stringify(jsonResult), function () {
console.log('finished writing :' + fileName);
resolve();
});
}).catch(err => reject(err));
}).catch(err => reject(err));
} catch (err) {
console.log(err);
}
});
}
问题是我不能让我的服务器在使用await Promise.all(tasks);
发送回响应之前等待所有的promise完成
我尝试了很多东西,这是我最新的方法。我还漏了什么吗
先谢谢你了!
我多次修改了我的实现,使用了像fs.promise这样的库,但没有成功。
更新:
我还尝试了下面的方法来使代码更可读:
app.post('/', (req: Request, res: Response) => {
const tasksRequest = req.body as TasksRequest;
let tasks = []
tasks = tasksRequest.tasks.map( (t) => processTask(t, tasksRequest.configs));
//const temp = (processTask(tasksRequest.tasks[0],tasksRequest.configs));
console.log(tasks);
Promise.all(tasks).then(res=>{
console.log('After awaiting');
});
});
async function processTask(task: Task, configs: Configs) {
try {
const fileName = './output/' + task.tag + 's.json';
const result = await fetch(configs.Host + configs.APIsBasePrefix + task.parentResource + task.mostRelatedPath, {
method: 'GET'
});
const jsonResult = await result.json();
return fs.promises.writeFile(fileName, JSON.stringify(jsonResult));
} catch (err) {
console.log(err);
}
}
1条答案
按热度按时间wlzqhblo1#
这是我看到的问题,不知道能不能帮到你。如果仍然有问题,最好进行调试。最好提供日志
1
2