gpt4 book ai didi

javascript - 使用管道从异步等待 https 请求构建文件

转载 作者:行者123 更新时间:2023-11-30 20:14:29 24 4
gpt4 key购买 nike

根据文档和一天的研究,我尝试使用管道来组装 API 调用返回的 Excel 电子表格。我中途保存它,但文件已损坏:

async function getWeeklyReport(queryString) {
return new Promise((resolve, reject) => {
request({
url: 'https://reports.myApi.com/ReportCenter/Bookings',
qs: queryString,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Basic ' + new Buffer(process.env.apiEmail + ':' + process.env.apiPassword, 'utf8').toString('base64')
}
}, (error, response, body) => {
if (error) {
reject(error);
} else {
if (response.statusCode === 200) {
resolve(body);
} else if (response.statusCode === 409) {
setTimeout(() => {
resolve(getWeeklyReport(queryString));
}, response.headers['Retry-After'] * 1000);
} else {
reject(response);
}
}
}).pipe(fs.createWriteStream('test3.xlsm'));

});

我在这里做错了什么? test3 已创建,但文件已损坏。谢谢!

最佳答案

有官方的 request-promise 消除了对样板 promise 构造函数的需要。

它要么是 promise 控制流,要么是流。使用 promises 会立即获得完整的响应,因此不需要流。也可以一次性写成:

const request = require('request-promise');
const { writeFile } = require('fs').promises;

async function getWeeklyReport(queryString) {
let result;
const response = await request({..., resolveWithFullResponse: true });

if (response.statusCode === 200) {
result = response.body;
} else if (response.statusCode === 409) {
await new Promise(resolve => setTimeout(resolve, response.headers['Retry-After'] * 1000));
result = await getWeeklyReport(queryString);
} else {
throw response;
}

await writeFile('test3.xlsm', result);
}

关于javascript - 使用管道从异步等待 https 请求构建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52063952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com