我对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,那么如果我不需要解析的值,异步/等待的意义是什么?
答案 0 :(得分:3)
如果我对您的问题理解正确,您是在说第一个代码段不起作用,因为它没有兑现承诺,并且您在问为什么它起作用。
简短的回答:这不是真正的工作,handlePromise2()
完成并返回时没有等待承诺得到解决或拒绝。
长答案:就像您去面包店问面包一样,但是面包并没有烘烤就排队,而是被烘烤了,但是由于客户(我们的情况)而被扔掉了。 handlePromise2
)进行了调用,并假定工作已经完成,毕竟它的作用只是调用该函数。
使用Promise,以便调用该函数的客户端知道期望什么,因此在您请求面包后,您将等待完成,这称为 promise 这不是实际价值(又名面包),而是对价值的承诺。 这就是您在第二段代码中所做的。