【问题标题】:Need some help understanding the usefulness and point of promises [duplicate]需要一些帮助来理解承诺的有用性和意义[重复]
【发布时间】:2019-02-19 14:52:28
【问题描述】:

我想开始使用 axios 从我已经编码的 RESTful api 中获取数据,但我不断收到 [object Promise] 而不是像数据这样有用的东西。

这是我的代码。

import axios from "axios";

const get = url => {
  return axios
    .get(url)
    .then(response => {
      return response.data;
    })
    .catch(error => {
      return error;
    });
};

我 console.log 这个的返回值并得到 [object Promise]。当我在下面的代码中调用 get 时,我需要我的 restful api 发回的数据。

const {get, post} = client;

const data = get("localhost:4000/data");

console.log(`Data: ${data}`);

感谢任何帮助。

【问题讨论】:

  • 你需要通过调用then()来等待promise。学习 Promise 的基础知识;你无法摆脱异步。
  • promise 的point 是以同步的方式使用异步操作。查看async await 了解使用承诺的更简洁的方式。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 这是我没有编写返回承诺的东西。我从上面的代码中得到了一个承诺。我只需要提取类似于数据的东西。您的链接与此处无关。
  • promise 的重点是they are returnable objects still acting like asynchronous callbacks,帮助处理异步任务。但是不,从根本上仍然不可能从承诺中提取价值,因为它只会在未来实现。

标签: javascript ecmascript-6 promise axios


【解决方案1】:

您的 get() 返回另一个承诺。为了获取数据或记录它,您需要再次链接它get().then(console.log);

【讨论】:

  • could get().then(data => return data);工作吗?
  • 是的,但它会再次返回一个承诺。正如@SLaks 所说:你无法摆脱异步。
  • 您实际上只是说 get().then 是答案,然后告诉我不,这不是答案,因为我没有使用异步。你能告诉我一个从 axios get 请求中获取数据的工作示例吗?
  • 你问的是有效的语法。您不能从 async 范围内的异步函数返回。两个选项: 1. 使范围异步并使用 await ,例如async () => { const data = await get('url'); console.log(data); }; 或 2. 将处理 data 的所有逻辑放入 then() 块中,例如get().then(data => { console.log(data); // ALL logic around data goes in here });.
  • 我现在明白了。当最终的 .then() 需要回调或某种形式的逻辑或函数时,它似乎并不能真正让你摆脱回调地狱。
猜你喜欢
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 2016-02-10
相关资源
最近更新 更多