Javascript访问Promise对象返回值的操作方法

 更新时间:2025年03月11日 08:55:40   作者:Linux运维技术栈  
这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从后端API获取数据并处理返回值,文章展示了如何使用.then()链式操作和async/await语法来访问Promise对象的返回值,感兴趣的朋友一起看看吧

在Javascript中,什么是Promise

Promise是一个对象,表示一个异步操作的事件完成或失败。

Promise对象可以是如下状态:

  • pending
  • fulfilled
  • rejected

最广泛使用的异步操作的一个实例是Fetch API。fetch() 方法返回一个Promise对象。

如果我们从后端API获取一些数据。对于这篇博文,我将使用JSONPlaceholder – 一个伪造的REST API。我们将获取一个id=1的用户数据。

fetch("https://jsonplaceholder.typicode.com/users/1")

让我们看看如何访问返回数据。

1- then() 链式操作

它是最简单和最明显的方式。

fetch("https://jsonplaceholder.typicode.com/users/1") // 1
  .then((response)=>response.json())  //2
  .then((user) => {
    console.log(user.address); // 3
  });

这里,我们(1)从API获取数据,(2)转换为JSON对象,然后(3)打印用户地址值到控制台。

结果如下:

{
  street: 'Kulas Light',
  suite: 'Apt. 556',
  city: 'Gwenborough',
  zipcode: '92998-3874',
  geo: { lat: '-37.3159', lng: '81.1496' }
}

2- 在之后的代码中使用返回值

但是如果我们想要在之后的代码中使用返回值,怎么办?

如果我们尝试像这样做(错误方式!)

const address = fetch("https://jsonplaceholder.typicode.com/users/1")
  .then((response)=>response.json())
  .then((user) => {
    return user.address;
  });
console.log(address);

我们将得到

Promise { <pending> }

得到这种结果,是因为Javascript代码总是同步执行,所以console.log()函数在fetch()请求后立即开始,而没有等待直到它解析完成。当console.log()函数开始运行的时刻,fetch()请求函数返回的Promise对象处于pending状态。

那就是说,我们可以访问另一个 .then() 回调函数的Promise对象的返回值:

const address = fetch("https://jsonplaceholder.typicode.com/users/1")
  .then((response) => response.json())
  .then((user) => {
    return user.address;
  });
const printAddress = () => {
  address.then((a) => {
    console.log(a);
  });
};
printAddress();

或使用async/await语法:

const address = fetch("https://jsonplaceholder.typicode.com/users/1")
  .then((response) => response.json())
  .then((user) => {
    return user.address;
  });
const printAddress = async () => {
  const a = await address;
  console.log(a);
};
printAddress();

以这两种方式,我们将得到:

{
  street: 'Kulas Light',
  suite: 'Apt. 556',
  city: 'Gwenborough',
  zipcode: '92998-3874',
  geo: { lat: '-37.3159', lng: '81.1496' }
}

结论

Promise对象广泛用于Javascript异步编程。而且开发者对于如何正确使用它,有时还有些困惑。在这篇博客文章里,我已经试图描述一个用户例子,即当开发者需要在之后的代码中使用来自Promise对象的返回值的实例。 

英文原文链接:https://dev.to/ramonak/javascript-how-to-access-the-return-value-of-a-promise-object-1bck

更多中文参考资料

[1] JavaScript Promise - Javascript教程. https://www.runoob.com/js/js-promise.html

[2] JavaScript Promise 对象 – 编程技术. https://www.runoob.com/w3cnote/javascript-promise-object.html

[3] 7.6 Promise – 7. 浏览器 – JAVASCRIPT教程- 廖雪峰的官方网站. https://liaoxuefeng.com/books/javascript/browser/promise/index.html

到此这篇关于Javascript如何访问Promise对象返回值的文章就介绍到这了,更多相关js访问Promise对象返回值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一道超经典js面试题Foo.getName()的故事

    一道超经典js面试题Foo.getName()的故事

    Foo.getName算是一道比较老的面试题了,大致百度了一下在17年就有相关文章在介绍它,下面这篇文章主要给大家介绍了关于一道超经典js面试题Foo.getName()的相关资料,需要的朋友可以参考下
    2022-03-03
  • avalon js实现仿微博拖动图片排序

    avalon js实现仿微博拖动图片排序

    玩微博的朋友都上传过图像吧,当图片上传后用户是可以随意拖动图片的,调整图片的顺序,那么此功能是怎么实现的,下面小编通过此篇文章给大家详解基于avalon js实现仿微博拖动图片排序,需要的朋友可以参考下
    2015-08-08
  • bootstrap制作jsp页面(根据值让table显示选中)

    bootstrap制作jsp页面(根据值让table显示选中)

    这篇文章主要为大家详细介绍了bootstrap做的jsp页面,根据值让table显示选中,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 基于Html+CSS+JS实现手动放烟花效果

    基于Html+CSS+JS实现手动放烟花效果

    这篇文章主要介绍了利用Html+CSS+JavaScript实现的放烟花效果,文中一共实现了两种方式:手动和自动,文中的示例代码讲解详细,感兴趣的可以试一试
    2022-01-01
  • Ajax验证用户名或昵称是否已被注册

    Ajax验证用户名或昵称是否已被注册

    本文主要介绍了Ajax验证用户名或昵称是否已被注册的实例方法。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • 微信js-sdk界面操作接口用法示例

    微信js-sdk界面操作接口用法示例

    这篇文章主要介绍了微信js-sdk界面操作接口用法,结合实例形式分析了微信界面操作的相关接口功能与使用技巧,需要的朋友可以参考下
    2016-10-10
  • 基于javascript canvas实现五子棋游戏

    基于javascript canvas实现五子棋游戏

    这篇文章主要介绍了基于javascript canvas实现的五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • JavaScript 新提案optional chaining可选链属性原理详解

    JavaScript 新提案optional chaining可选链属性原理详解

    这篇文章主要为大家介绍了JavaScript 新提案optional chaining可选链属性原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • JavaScript ES6 Class类实现原理详解

    JavaScript ES6 Class类实现原理详解

    这篇文章主要介绍了JavaScript ES6 Class类实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • JS、jQuery中select的用法详解

    JS、jQuery中select的用法详解

    这篇文章主要介绍了JS、jQuery中select的用法详解的相关资料,需要的朋友可以参考下
    2016-04-04

最新评论