我试图理解在Google搜索lead me to this article
的Javascript中对Promise的使用。帖子的作者指出了这一点
承诺(如回调)使我们可以等待某些代码完成 在运行下一部分代码之前执行。
出于某种原因在我看来(可能是这样)
axios.get(url).then((response) => ).catch((err) =>
此后,他展示了这个示例
function delay(t){
return new Promise(function(resolve){
return setTimeout(resolve, t)
});
}
function logHi(){
console.log('hi');
}
delay(2000).then(logHi);
在这里,我无法理解我们在function(resolve)
传递什么信息/如何传递解决方案以及何时使用类似
return new Promise(function(resolve){
什么时候做类似
axios.get(url).then((response) => ).catch((err) =>
答案 0 :(得分:3)
示例代码不是很好,因为promise实际上并不能解析一个值-因此没有任何内容传递给then()
。传递给then
的函数也不期望值。它只是在等待并记录“ hi”。所以基本上它是一个没有解析值的计时器。
如果要传递值,则需要resolve
和实际值:
如果他们返回一个值然后显式使用该值,那将是一个更具指导意义的示例。更像是:
function delay(t) {
return new Promise(function(resolve) {
return setTimeout(() => resolve("some value from promise"), t)
});
}
function logHi(text) {
console.log(text);
}
delay(1000).then(logHi)
// alternatively the same result as:
// delay(1000).then(value => logHi(value));
上面的代码使用了我们手动创建的Promise,因为我们想解决setTimeout
之后的问题,该问题不会返回其自身的Promise。它实际上是 promismises setTimeout
。当您使用axios之类的库时,它的get
方法已经返回了promise,因此您可以像这样使用它:
axios.get(url).then((response) => )
不需要(实际上是一种反模式)将其包装在另一个new Promise
中。您可以只接受get()
返回的承诺,并根据该承诺致电then()
。