承诺等待得到解决,没有回报

时间:2019-05-06 05:44:44

标签: javascript node.js promise

我对nodejs / javascript中的异步处理的理解是,如果在函数中处理了异步调用,则它必须返回promise或接受回调以进行链接以及等待异步调用完成。

但是我发现事实并非如此,因为以下代码有效,并等待所有诺言完成

class Animal {
    class Mammal {
        class Tiger {}
        class Wolf {}
    }
    class Bird {} 
}
当我将承诺退还到最后时,它应该可以工作。

[
    Animal.self,
    Animal.Mammal.self,
    Animal.Mammal.Tiger.self,
    Animal.Mammal.Wolf.self,
    Animal.Bird.self,
]

Same也可以与回调一起使用

function handlePromise() {
  Promise.resolve('Hello Async').then(data => {
    Promise.resolve('Hello Async 2').then(data => {
      return delay(3000).then(() => console.log(data));
    });
    return delay(2000).then(() => console.log(data));
  });

  Promise.resolve('hello').then(data => console.log(data))
};

function delay(time) {
  return new Promise(resolve => setTimeout(resolve, time))
}

function handlePromise2() {
  handlePromise()
};

handlePromise2();

那我在这里想念什么?

如果仅用promise调用a即可解决promise,那么如果我不需要解析的值,异步/等待的意义是什么?

1 个答案:

答案 0 :(得分:3)

如果我对您的问题理解正确,您是在说第一个代码段不起作用,因为它没有兑现承诺,并且您在问为什么它起作用。

简短的回答:这不是真正的工作,handlePromise2()完成并返回时没有等待承诺得到解决或拒绝。

长答案:就像您去面包店问面包一样,但是面包并没有烘烤就排队,而是被烘烤了,但是由于客户(我们的情况)而被扔掉了。 handlePromise2)进行了调用,并假定工作已经完成,毕竟它的作用只是调用该函数。

使用Promise,以便调用该函数的客户端知道期望什么,因此在您请求面包后,您将等待完成,这称为 promise 这不是实际价值(又名面包),而是对价值的承诺。 这就是您在第二段代码中所做的。

可怜的handlePromise()现在不知道该如何处理食物enter image description here