【问题标题】:Rewrite as asynchronous + Rewrite without arrow functions重写为异步+不带箭头函数的重写
【发布时间】:2020-06-19 14:05:51
【问题描述】:

我正在学习 Web 开发代码,目前正在使用 JavaScript 和 Node.js - 我需要 (A.) 不使用任何箭头函数重写代码 (B.) 使用 async/await 函数重写代码。

fetch("https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699")
.then(res => res.json())
.then((result) => {
      items= result.items;
      console.log(items);
    }),
  (error) => {
   console.log(error);
  } 

我们将不胜感激任何和所有的帮助,我试图寻求帮助,但我无法理解它。

【问题讨论】:

  • 除此之外,我将如何编写代码以仅显示返回的书的标题和描述?

标签: javascript node.js asynchronous async-await arrow-functions


【解决方案1】:

一)

fetch("https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699")
.then(function(res) { return res.json() })
.then(function(result) {
      const items= result.items;
      console.log(items);
    })
  .catch(function(error) {
   console.log(error);
  })

B)

async function getItems() {
  let results;
  try {
    const response = await fetch("https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699")
    results = await response.json()
  } catch (e) {
    return new Error('error......')
  }

  return results.items
}
const items = await getItems()
console.log(items)

【讨论】:

  • 感谢您提供答案,因为 A) 和 B) A) 工作正常,但 B) 存在问题,因为标识符“项目”已被声明。这是我现在理解的应该包含在原始问题代码中的内容。我不确定如何使用这些信息。
  • 嗨@jeMcFadzean,这是不可能的。 “items”在 B 中只定义了一次。如果您的代码已经定义了一个名为“items”的变量,请尝试更改变量名称。例如将B中的“items”变量名改为“resultItems”。
【解决方案2】:

你的意思是这样吗?如果这是您想要的,如果您需要更多信息,请告诉我

async function getBooks() {
  try {
    const fetchResponse = await fetch("https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699");
    const result = fetchResponse.json();
    const books = result.items;
    console.log(books);
  } catch(error) {
    console.log(error);
  }
}

// await getBooks();

【讨论】:

  • 感谢您的帮助!这完美地回答了问题 B,并且对我来说很简单。你有关于问题 A 的箭头函数的好的资源吗?
【解决方案3】:

首先,要阅读箭头函数,你必须了解箭头函数的返回值有两种方式:

const func = x => x * x;  // concise body syntax, implied "return"          
const func = (x, y) => { return x + y; };  // with block body, explicit "return" needed

现在,下面将介绍使用 Promise 链将代码转换为使用 async/await 的代码的步骤。通过完成任务B(将promise链替换为async/await),您将完成任务A(没有箭头函数的代码)

如果一个方法返回一个Promise,就像fetchBody.json()一样,你可以等待它的结果:

const res = await fetch("https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699");
const result = await res.json();
items = result.items;
console.log(items);

要在不链接 .catch 的情况下处理错误,请使用 try/catch 块包装代码:

try {
  const res = await fetch(
    "https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699"
  );
  const result = await res.json();
  items = result.items;
  console.log(items);
} catch (error) {
  console.log(error);
}

最后,await 关键字只能在异步函数docs 中使用,这就是为什么你必须将它包装到使用async 声明的函数中:

async function run() {
  try {
    const res = await fetch(
      "https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699"
    );
    const result = await res.json();
    items = result.items;
    console.log(items);
  } catch (error) {
    console.log(error);
  }
}
run();

您还应该知道,使用 async 关键字声明的任何函数也会返回一个您可以等待的 Promise。

【讨论】:

  • 感谢您一步一步的解释,这有助于我更好地理解。不幸的是,A 和 B 必须分开进行。也许您可以向我指出一个资源,在那里我可以了解更多关于箭头函数的信息?
  • 当然。这个MDN docs 可能会有所帮助,尤其是“更短的功能”部分。 @Pablo Darde 的回答几乎就是我要写的。
猜你喜欢
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 2017-10-09
  • 2017-08-15
  • 2019-08-07
  • 2018-11-26
  • 1970-01-01
相关资源
最近更新 更多