gpt4 book ai didi

arrays - 异步等待 JSON 解析不等待

转载 作者:搜寻专家 更新时间:2023-11-01 00:13:47 25 4
gpt4 key购买 nike

我在 async/await 不等待上一条语句时遇到问题。我正在尝试读取一个 JSON 文件,然后尝试操作生成的对象。尽管有 await,但它在执行下一个函数时仍未定义该数组。

function initJson(file) {
let obj;
fs.readFile(file, 'utf8', (err, data) => {
if (err) {
throw err;
}
try {
const obj = JSON.parse(data);
console.log(obj);
}
catch (err) {
throw err;
}
});
return obj;
};

filterItemForKeyValue = function filterItemForKeyValue(obj, k, v) {
if (typeof obj !== 'undefined' && obj) {
return obj.filter(item => item[k] !== v);
}
return false;
};

async function handleFavorites(file) {
let favorites = await initJson(file);
favorites = await filterItemForKeyValue(favorites, 'delete', true);
// here it's already false because favorites is undefined because it didn't wait

console.log(favorites);
return favorites;
};

let favs = handleFavorites('test.json');
console.log(favs);

最佳答案

您的 initJson 没有使用 Promise,因此您无法等待响应。通过返回如下示例所示的 promise 来修改 initJson

function initJson(file) {
return new Promise((resolve, reject) => {
fs.readFile(file, 'utf8', (error, data) => {
if (error) {
reject(error);
}
resolve(JSON.parse(data));
});
});
};

还为您转换了 filterItemForKeyValue:

var filterItemForKeyValue = function filterItemForKeyValue(object, key, value) {
return new Promise((resolve, reject) => {
try {
if (typeof object !== 'undefined' && object) {
resolve(object.filter(item => item[key] !== value));
}
} catch (error) {
reject(false);
}
});
};

这就是您在答案中提供的更改后与结果交互的方式。

handleFavorites('test.json').then((result) => {
console.log(result);
});

promise :https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

异步函数:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

关于arrays - 异步等待 JSON 解析不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54381295/

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