javascript promise的两个return语句在这里意味着什么?

时间:2018-10-10 02:45:08

标签: node.js jwt

我正在学习javascript和Node.js,并遇到了这段代码。我有一个user.js代表用户架构,而server.js包含我的发布路线。

UserSchema.methods.generateAuthToken = function() {

  return user.save().then(()=> {  //Return Statement 2
    return token;                 //Return Statement 3
  });
};

我想了解调用user.save()时两个return语句的含义,然后在'then'中返回一个令牌。为什么我们需要在“ user.save()”之前先“返回”

这是“开机自检路线”

user.save().then(()=>{
    return user.generateAuthToken();  //Return Statement 1
  }).then((token) =>{
    res.header('x-auth', token).send(user);
  })

为什么我们返回'user.generateAuthToken()'而不是仅仅调用它?我们为什么要使用三个return语句,而根据我的理解,不需要返回语句,因为promises会自动在'then'块中返回某些内容。 有人可以在这里解释流程吗?我会非常感谢你。 谢谢。

3 个答案:

答案 0 :(得分:0)

您我的朋友正在与Promises合作。 (第一个代码) 您打电话的时候     user.save() 您正在返回一个Promise。该函数可能成功也可能不会成功结束。Promise具有一个     然后承诺原型 function ..第一个arg是一个成功函数,当函数解析时(实项)

在第二个代码中..在第一个函数中,您返回了另一个Promise(整个然后返回了另一个Promise ..,但仅在它解析时)

如果您需要摆脱JavaScript的麻烦,请尝试使用Eloquent JavaScript(由Marijn Haverbecke撰写)

答案 1 :(得分:0)

  

为什么我们需要在“ user.save()”之前“返回”

这将返回解析令牌的承诺。没有返回,我们将无法访问save函数外部的令牌。

  

为什么我们返回'user.generateAuthToken()'而不是仅仅调用它?

同样,我们需要令牌。如果仅调用该函数,则会执行保存操作,但是当Promise解析时我们没有令牌(在这种情况下,它用于响应的标头)。

  

为什么我们要使用三个return语句,而根据我的理解,因为Promise会自动在'then'块中返回内容,所以不需要return语句。

您的理解是错误的。 then将从诺言返回的任何内容都可用,如果什么都没有返回,则没有参数(在这种情况下为令牌)。

答案 2 :(得分:0)

在第一个函数中,user.save()将返回一个promise,当您在then的{​​{1}}块中返回令牌时,promise将解析令牌的值。

在第二个函数中,如果您未使用user.save()之前的return,它将仅执行该函数,然后您将在then块中获得user.generateAuthToken();的结果。