gpt4 book ai didi

javascript - 解决对象数组的 promise 的 typescript

转载 作者:行者123 更新时间:2023-11-30 20:39:53 31 4
gpt4 key购买 nike

我想一般性地声明一个函数返回一个解析对象数组的 promise (我认为这会解决一个 TS 错误;TS 不知道我可以在已解析的数组上使用 forEach) .

关于函数openJSON() (见下文)我试过这样的事情:

function OpenJSON(): Promise<Array<{id: string, performance: number, average: number}>> { // ...

但我仍然遇到错误。并且在未来,我希望这个函数能够产生各种不同的对象。是否只有一种通用的方法来声明一个对象数组,比如 Promise<Array<{}>>

async function produceDataRows() {
let tableContent = '';
let jsonData = await OpenJSON();

// error occurs here: [ts] Property 'forEach' does not exist on type '{}'.
jsonData.forEach(element => {
// convert this JSON data into table content
});
return tableContent;
};

function OpenJSON() {
return new Promise( (resolve, reject) => {
fs.open(kJsonPath, 'wx', (err, fd) => {
if (err) {
if (err.code === 'EEXIST') {
fs.readFile(kJsonPath, 'utf8', function (err, content) {
if (err) throw err;
resolve(JSON.parse(content));
})
} else {
reject( new Error('When openening performance.JSON, in generateHTML.js, an unexpected error has occured. ' + err) );
}
} else throw Error('There is a problem opening performance.JSON');
})
})
}

最佳答案

在这种情况下,您需要在构建 promise 本身时指定结果类型。

function OpenJSON() {
return new Promise<Array<{ id: string, performance: number, average: number }>>(
(resolve, reject) => {
fs.open(kJsonPath, 'wx', (err, fd) => {
if (err) {
if (err.code === 'EEXIST') {
fs.readFile(kJsonPath, 'utf8', (err, content) => {
if (err) {
reject(err);
}
resolve(JSON.parse(content));
})
} else {
reject(Error('When openening performance.JSON'));
}
} else {
reject(Error('There is a problem opening performance.JSON'));
}
});
});
}

请注意,在上面,我修复了几个错误处理问题。

Playground link

关于javascript - 解决对象数组的 promise 的 typescript ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49395419/

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