javascript - 如何从 promise 中提取值(value)

标签 javascript asynchronous promise

我在下面有这段代码:我怎样才能从这个 promise 中提取值(value)?

  var value = Auth.loggedinUser().then(function (user){
    return user.id
  });

  console.log(value)

下面是我的 promise :

Promise {$$state: Object}
    $$state:Object
    status:1
    value:2
__proto__:Object
__proto__:Object

我正在尝试获取值并将其设置为我的值变量。哪个应该是 2 或者它会返回的任何值。

我的目标是尽可能将 promise 的值设置为全局变量

最佳答案

promise 的整个概念是您只能在 .then() 处理程序中或使用 await 获取和使用 promise 的值。您不能直接从 promise 中获取值(value),也不应该尝试这样做,因为如果您这样做,很可能是因为您实际上并没有掌握异步代码的工作方式、 promise 的工作方式以及值(value)可用的时间安排。未知,因此您必须使用 promise 通知系统来了解该值何时可用。

因此,在您的代码中,您需要在 .then() 处理程序中使用 user.id 或在您传递给它的某个函数中调用从 .then() 处理程序内部。

Auth.currentUser().then(function (user){
    // use user.id here
    // or call some other function here and pass it the id myFunc(user.id)
});

// You do not use user.id here

获取 user 对象的代码是异步的。这意味着它是非阻塞的,并且它会在未来的某个未知时间完成。您可能知道 useruser.id 值现在有效的唯一位置是在 .then() 处理程序内部。

打个比方。你把你的车投入使用。他们说他们不知道什么时候可以取货,因为他们还不知道出了什么问题,也不知道他们需要多长时间来诊断、获取零件和修理它。他们说完成后会调用你。所以,在这一点上,你不能制定任何计划,包括使用你的汽车,因为你真的不知道它什么时候准备好。服务中心给了你一个“ promise ”,当它准备好时,他们会调用你,然后(也只有到那时)你才能进来取车或计划你什么时候可以拥有你的车。所以,你唯一可以为你的汽车制定计划的地方是在他们给你回电话并告诉你它什么时候可以准备好之后出现的情况。来自服务中心的回调就像 promise 的 .then() 处理程序。只有在源自 .then() 处理程序的代码中,您才能对已解析的值执行任何操作。

Promise 是故意不透明的,因此您无法查看它们的内部。他们定义了一个标准接口(interface),用于通过 .then() 通知完成或通过 .catch() 通知错误。这就是你使用 promise 的方式。异步编码通常需要一些时间来适应(与大多数其他编程环境中使用的范例不同),并且在此基础上构建 promise ,为异步操作提供一种通知、协调、链接和传播错误的标准方法,这也需要一些时间学习。

My goal is to set the value of the promise to a global variable if possible

由于多种原因,这几乎不是使用通过异步操作获得的值的正确方法。除了避免使用全局变量的常见原因之外,任何可能想要使用该值的代码根本不知道它何时才是真正有效的值。该信息仅在 .then() 处理程序内部或使用 await 之后(或者在 .catch() 处理程序中出现错误时才知道) ).

关于javascript - 如何从 promise 中提取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45428659/

相关文章:

javascript - 使用输入作为提交按钮的 html 表单

c# - HttpClient PostAsync() 从不返回响应

javascript - 如何在异步操作中指示 "doneness"

javascript - 异步/同步 Javascript

javascript - 返回搜索 promise

javascript - jQuery动画仅当ajax信息不相同时

javascript - 加密文本每次都改变 -Msrcrypto

javascript - moment.js中参数 "true"是什么意思?

javascript - 回调函数访问闭包变量?

javascript - Node promise 链似乎在字符串匹配时被破坏,如何解决?