当前位置: 首页 > 面试题库 >

如何构造嵌套的Promises

颛孙凯定
2023-03-14
问题内容

在我遇到的情况下,我认为对我来说唯一的选择是在彼此之间嵌套一些承诺。我有一个需要执行的Promise,以及一种在完成Promise之前会执行某些操作的方法。像这样:

let promise = new Promise((resolve, reject) => {

  // Do some stuff

});

doSomethingUntilPromiseisDone(promise);

但是,在我的Promise中,我需要执行另一个返回另一个Promise的方法:

let promise = new Promise((resolve, reject) => {

  fetchValue(url)
    .then((value) => {

      // Do something here

    }).catch((err) => {
      console.error(err);
    });

});

doSomethingUntilPromiseisDone(promise);

但是现在,在该fetchValue方法的then语句中,我需要执行另一个方法,猜测是什么,然后返回另一个Promise:

let promise = new Promise((resolve, reject) => {

  fetchValue(url)
    .then((value) => {

      saveToCache(value)
        .then((success) => {

          console.log('success!!');
          resolve('success');

        });

    }).catch((err) => {
      console.error(err);
    });

});

doSomethingUntilPromiseisDone(promise);

所以最后,我有一个承诺,一个承诺之内,一个承诺之内。有什么办法可以更好地构造它,使其更直接吗?似乎将它们嵌套在一起与Promise的预期链接方法相反。


问题答案:

.then()

let doStuff = (resolve, reject) => {/* resolve() or reject() */};
let promise = new Promise(doStuff);
doSomethingUntilPromiseisDone(
  promise 
  .then(value => fetchValue(url))
  .then(value => value.blob())
  .then(saveToCache)
)
.then(success => console.log("success!!"))
.catch(err => console.error(err))


 类似资料:
  • 我正在研究如何将自定义构造与SnakeYAML一起使用,但不确定如何实现嵌套。我用这个例子作为参考。 在链接的示例中,相关的YAML和构造是, 现在,让我们将YAML更改为, 我想使用另一个来解析对象,但要在上下文中进行。我对关系的理解非常不稳定,我对如何在自定义构造函数中使用自定义构造函数感到困惑。有什么想法或资源吗?

  • 我不确定我是否过度工程化了,但我正在考虑创建一个枚举,其中包含一个枚举列表作为它的值,从中我可以得到它的值。 我无法确定枚举的类型,以便正确地将值数组筛选到正确的枚举。例如,我可以用轻松地获得US枚举。我遇到的困难是从该数组中获得正确的值。我尝试比较名称,

  • 您可以在另一个if或else if语句中使用if或else if语句。 语法 (Syntax) 嵌套if语句的语法如下 - if ( logical_expression 1) then !Executes when the boolean expression 1 is true … if(logical_expression 2)then ! Executes

  • 问题内容: 这个问题是关于Java的有趣行为的:在某些情况下,它为嵌套类生成了其他(不是默认的)构造函数。 这个问题也与Java使用该奇怪的构造函数生成的奇怪的匿名类有关。 考虑以下代码: 这将打印: 好。接下来,让构造函数私有: 再次运行程序。接收: 还可以 但是现在,让我们以这种方式修改方法(添加类创建的新实例): 然后输入变为: 这是什么: a.TestNested $ A(a.TestNe

  • 问题内容: 这更多的是 困惑而 不是问题。我有以下代码: 即使基类构造函数为,在这里也允许对1 * 的调用。如果我们在同一包中将这些类编写为单独的类: 编译器正确地在2 *处给出了错误,因为基类构造函数不可见。 当两个类在一个类中都声明为静态时,为什么编译器没有在我的第一种情况下引发错误? 问题答案: 如果成员或构造函数被声明为私有,则仅当访问发生在包含成员或构造函数的声明的顶级类(第7.6节)的

  • 您可以在另一个select case语句中使用一个select case语句。 语法 (Syntax) select case(a) case (100) print*, "This is part of outer switch", a select case(b) case (200) print*, "This is part o