promise.then() 返回 Promise { <pending> }

时间:2021-01-16 21:49:16

标签: javascript node.js api async-await es6-promise

函数 fetchData 返回一个承诺,然后我在 generateURL 函数中通过将 promise.then 链接来处理该承诺,但它返回 Promise 。函数 generateURL 应该返回一个字符串我做错了什么?

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;
  });
};
 

3 个答案:

答案 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));
相关问题