在我的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;
},
};
您需要使setTimeout
与async/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()
——您正在对每个数组元素执行转换,没有任何副作用,因此它在语义上更适合。