📜  门| GATE-CS-2014-(Set-3)|问题3(1)

📅  最后修改于: 2023-12-03 14:58:29.947000             🧑  作者: Mango

问题3

本题考察对JavaScript中Promise的理解和运用。

题目描述

给定两个异步函数funcAfuncB,它们的作用是向服务器发送请求并返回一个Promise,其中funcB依赖于funcA的结果。请编写一个函数result(),使用Promise解决异步函数之间的依赖关系,确保在funcAfuncB成功执行后,函数result()能够返回它们的结果。

function funcA() {
  return new Promise((resolve) =>
    setTimeout(() => resolve(10), 1000)
  );
}

function funcB(number) {
  return new Promise((resolve) =>
    setTimeout(() => resolve(number * 2), 2000)
  );
}

function result() {
  // 在此处编写代码
}

result().then(console.log); // 20
解题思路

在运用Promise解决异步函数依赖关系时,需要注意以下几点:

  1. 处理异步函数嵌套时的回调地狱问题,提高代码可读性和可维护性。
  2. 使用Promise.all()方法等待多个Promise完成后返回结果。
  3. 使用then()方法来处理Promise的返回结果。

对于题目中提供的两个异步函数,funcB依赖于funcA的结果,因此需要先执行funcA,再将结果传递给funcB。代码如下:

function result() {
  return new Promise((resolve) => {
    funcA().then((result) => {
      funcB(result).then((result) => {
        resolve(result);
      });
    });
  });
}

首先以new Promise()的形式返回一个新的Promise实例,通过funcA()来获取结果,在funcA()返回的Promise对象上使用then()方法来获取异步操作的结果。一旦funcA()成功地返回结果,我们就可以调用funcB(),将funcA()返回的值作为参数传递给funcB()。在获取funcB()返回的Promise对象后,再次使用then()方法来获取异步操作的结果,并在成功时调用resolve()方法,以确定我们返回的Promise对象的状态和值。

最后,在代码的最后,你可以通过将result()函数调用传递给then()方法,来打印结果到控制台上。

总结

通过这个题目的解答,我们学习到了如何运用Promise来解决异步函数之间的依赖关系。在实际开发过程中,我们会经常需要处理类似的问题,使用Promise可以提高代码的可读性和可维护性,让运行流程更加清晰。