函数 fetchData 返回一个承诺,然后我在 generateURL 函数中通过将 promise
与 .then
链接来处理该承诺,但它返回 Promise
const fetch = require('node-fetch');
const fetchData = async () => {
return await fetch('https://jsonplaceholder.typicode.com/todos/1');
};
const generateURL = () => {
const baseURL = 'https://cdn.test.com/';
fetchData().then((res) => {
const data = res.json();
console.log('data', data);
const id = data.id;
console.log('id', id);
const generatedURL = `${baseURL}${id}`;
return generatedURL;
});
};
答案 0 :(得分:1)
拥有 return await
是一种反模式 https://eslint.org/docs/rules/no-return-await
const fetch = require('node-fetch');
const fetchData = () => {
return fetch('https://jsonplaceholder.typicode.com/todos/1');
};
const generateURL = () => {
const baseURL = 'https://cdn.test.com/';
return fetchData().then((res) => {
const data = res.json();
console.log('data', data);
const id = data.id;
console.log('id', id);
const generatedURL = `${baseURL}${id}`;
return generatedURL;
});
};
generateURL().then(result =>{
console.log(result)
})
答案 1 :(得分:1)
您应该为 then()
的获取结果添加另一个 json()
,如文档 https://www.npmjs.com/package/node-fetch#common-usage
所以,它可以如下所示:
const generateURL = () => {
const baseURL = 'https://cdn.test.com/';
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(res => res.json())
.then(data => {
console.log('data', data);
const id = data.id;
console.log('id', id);
const generatedURL = `${baseURL}${id}`;
return generatedURL;
});
};
如果您仍然想使用 fetchData
函数,它不需要是 async-await
,只需返回 fetch
,因为它已经返回了一个 Promise。
答案 2 :(得分:1)
减少一点代码而不是添加多个承诺解析
const fetch = require('node-fetch');
const everything = async () =>{
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
const {id} = await response.json();
return `https://cdn.test.com/${id}`
}
everything().then((res)=>console.log(res));