如何获得在GraphQL根对象内部工作的timeOut



在我的GraphQL后端;雇员";即使数组必须等待其数据,它也会被正确地获取和返回;slowEmployees";它包含一个timeOut,返回一个空数组。我怎样才能得到";slowEmployees";等待返回数据?

const root = {
hello: () => {
return 'hello world';
},
message: () => {
return 'the message';
},
books: () => {
return ['More About Linux', 'Bash Shell Scripting'];
},
employees: async () => {
const rawEmployees = (
await axios.get(
'https://edwardtanguay.netlify.app/share/employees.json'
)
).data;
const employees = [];
rawEmployees.forEach((rawEmployee) => {
const employee = {
firstName: rawEmployee.firstName,
lastName: rawEmployee.lastName,
};
employees.push(employee);
});
return employees;
},
slowEmployees: () => {
const employees = [];
setTimeout(async () => {
const rawEmployees = (
await axios.get(
'https://edwardtanguay.netlify.app/share/employees.json'
)
).data;
rawEmployees.forEach((rawEmployee) => {
const employee = {
firstName: rawEmployee.firstName,
lastName: rawEmployee.lastName,
};
employees.push(employee);
});
}, 2000);
return employees;
},
};

您需要使setTimeoutasync/await兼容,这是一个非常常见的问题。

如果您创建一个";承诺的"setTimeout:

function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

你可以await它类似于你的常规employees端点:

...
slowEmployees: async () => {
// Fetch raw data
const rawEmployees = (
await axios.get(
'https://edwardtanguay.netlify.app/share/employees.json'
)
).data;
// Simulate being slow
await timeout(2000);
// Transform to required data shape and return
return rawEmployees.map((rawEmployee) => {
return {
firstName: rawEmployee.firstName,
lastName: rawEmployee.lastName,
};
});
},

注意,我还将.forEach()+.push的组合更改为.map()——您正在对每个数组元素执行转换,没有任何副作用,因此它在语义上更适合。

最新更新