了解Javascript中的承诺

时间:2018-09-27 19:48:07

标签: javascript

我试图理解在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) => 

1 个答案:

答案 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()