Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Redux-saga不会等待api调用解决,而是不断返回承诺。如何在api调用时进行"yeild call“等待?

Redux-saga不会等待api调用解决,而是不断返回承诺。如何在api调用时进行"yeild call“等待?
EN

Stack Overflow用户
提问于 2020-07-20 19:50:03
回答 1查看 407关注 0票数 1

在这里我发出了API请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function* search(value){
    // return new Promise(async (resolve, reject)=>{
    //     try {
    //         const res = await axios.get(`https://www.breakingbadapi.com/api/characters?name=${value}`)
    //         console.log(res.data)
    //         resolve(res.data)
    //     } catch (error) {
    //         reject(error)
    //     }
    // })

    return axios.get(`https://www.breakingbadapi.com/api/characters?name=${value}`)

            .then(res=>{
                console.log(res.data)
            })

            .catch(err=>{
                // console.log(err)
            })
}

在这里我调用这个函数来获取结果并将其放入状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  function* startSearch(value){
    try {
        yield put({type:'loading'})
        const person = yield call(search, value)
        console.log("SAGA",person)
        yield put({type:'success', payload:person})
    } catch (error) {
        yield put({type:'failure'})
    }
}

正如您所看到的,我已经尝试将api调用包装在promise和典型的.then .catch中。无论如何,我让控制台记录一个promise,并且没有任何类型的对象按照预期存储在状态中。根据文档,如果返回一个promise,seem调用应该会暂停生成器,但这似乎并没有发生。

编辑:这就是为什么你需要远离屏幕的原因。我所需要做的就是从搜索函数中删除"*“。超级简单。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-20 19:53:31

看起来很简单。您所需要做的就是将promise生成函数调用包装在它自己的函数中,然后您就可以使用Redux-Saga的call()调用它了。

我认为你只需要让你的search函数成为一个常规函数,而不是一个生成器函数。(删除*)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function search(url) {
  return axios({ url })
    .then(response => response.data)
    .catch(err => {
      log.error(err);
    });
}
function* startSearch() {
  const response = yield call(search, downloadURL);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63002822

复制
相关文章
G Suit 介绍
G Suite是一组应用程序,包括Gmail、文档、表格、幻灯片、站点等,以及供组织使用的一组消息传递、协作、安全和遵从性工具。G Suite开发者平台是一个工具和资源的集合,它允许您将软件与G Suite及其用户集成,或者创建完全在G Suite中运行的新应用程序。
拿我格子衫来
2022/01/24
3.3K0
G Suit  介绍
Kaggle winner 方案 | Instacart Market Basket Analysis: 2nd place
今天来看看 Instacart Market Basket Analysis competition 的第二名方案,作者是 Yahoo! JAPAN 的一个数据科学家 Kazuki Onoder
杨熹
2018/04/03
1K0
Kaggle winner 方案 | Instacart Market Basket Analysis: 2nd place
在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail
在项目开发中,发送邮件时一种非常常见的功能。一般的情况下,大型的公司都有自己的邮件系统,我们可以直接通过公司的Pop/SMTP Server进行邮件的发送和接收。不过,对于一些小公司不具有这样的条件,他们一般通过一些公共的邮件服务通过商提供的邮件服务。比如Sina,163就是很好的、常用的邮件服务。不过相比之下,我还是习惯使用Google Gmail。 接下来,我将介绍两方面来介绍今天的内容,如果通过Managed code通过Gmail进行邮件的发送,以及如何在Outlook中配置Gmail。今天介绍的东
蒋金楠
2018/02/07
1.7K0
在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail
在 Linux 命令行中收发 Gmail 邮件
我喜欢在 Linux 终端上读写电子邮件的便捷,因此我是 Mutt 这个轻量简洁的电子邮件客户端的忠实用户。对于电子邮件服务来说,不同的系统配置和网络接入并不会造成什么影响。这个客户端通常隐藏在我 Linux 终端的 某个标签页或者某个终端复用器的面板 上,需要用的时候随时可以调出来,不需要使用的时候放到后台,就不需要在桌面上一直放置一个电子邮件客户端的应用程序。
用户1880875
2021/09/08
3K0
Cozmo人工智能机器人SDK使用笔记(9)-判断部分if_this_then_that
此示例演示了如何使用“If This Then That”(http://ifttt.com)使Cozmo在Gmail帐户收到电子邮件时作出回应。以下说明将引导您在IFTTT网站上设置小程序。当调用applet触发器(发送在此示例中启动的Web服务器收到的Web请求)时,Cozmo将播放动画,说出电子邮件发件人的姓名并在他的脸上显示邮箱图像。
zhangrelay
2019/01/31
5980
【windows屏幕扩展】把你多余屏幕利用起来,spacedesk屏幕扩展超低延迟解决方案[通俗易懂]
spacedesk是一款基于TCP/IP协议的屏幕扩展工具,通过这款工具你可以把自己身边的闲置的平板手机或者笔记本利用起来,扩展你的屏幕。只要你的两台设备处于同一个网络环境下(只要互相能够ping通),你就可以实现屏幕扩展(卡不卡我就不知道了)。
全栈程序员站长
2022/09/21
4.1K0
【windows屏幕扩展】把你多余屏幕利用起来,spacedesk屏幕扩展超低延迟解决方案[通俗易懂]
Eclipse & Spring Tool Suite常用配置
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。Eclipse是Java开发人员常用的开发工具,虽然现在很多人转向使用IDEA,但是Eclipse给我们还是留下了一段美好的回忆。
Java架构师必看
2020/04/22
2K0
在Kubernetes集群中扩展CoreDNS
我正在分享在Kubernetes(1.12)中使用CoreDNS(1.2.5)运行的一些测试结果,以便为将CoreDNS调整到您的集群提供一些参考点。除了在默认配置中测试CoreDNS之外,我还测试了CoreDNS并启用了可选的autopath插件。autopath插件是一种优化,有助于透明地缓解由于Kubernetes臭名昭着的ndots:5问题而导致的Pod性能损失。这些测试在启用autopath时量化了内存/性能交易。
CNCF
2019/12/05
2.2K0
在Kubernetes集群中扩展CoreDNS
tkinter -- Place
注意 bt2放置的位置是在 root 的(0,0)处,而 button1放置的位置是在 lb1的(0,0)处,原因是由于 bt1使用了 in 来指定放置的窗口为 lb1
py3study
2018/08/03
1K0
谷歌CTS测试(cta测试)
CTS兼容性测试的主要目的和意义在于使得用户在Android系统的应用过程中,有更好的用户体验,并展现出Android系统的优越特性;使得Android应用程序编写者更容易编写高质量的应用程序;充分展现Android Market的优势,让获得CTS认证的终端得到Android Market的使用许可.
全栈程序员站长
2022/07/31
2.2K0
谷歌CTS测试(cta测试)
SDN在5G和WAN中的应用,它是否具备可扩展性?
软件定义网络(SDN)是过去10年来出现的网络转型的两大支柱之一,SDN诞生之初,很多人将之视为网络摆脱传统路由的途径,但这一目标至今都没有实现。虽然SDN在数据中心占有一席之地,但在WAN中的SDN
SDNLAB
2018/06/11
6760
CTS、CTS Verify、GTS测试以及GMS认证介绍
一个手工测试的apk,完成自动化测试无法完成的操作(锁屏、蓝牙、摄像头等);
用户7557625
2020/07/15
7K0
CTS、CTS Verify、GTS测试以及GMS认证介绍
在Edge中安装Chrome扩展程序
Edge可以安装绝大多数Chrome商店中的扩展, 但Chrome中的谷歌开发App程序, 类似Secure Shell App, 目前是无法安装的, 新版Edge使用了Chrome的Chromium内核, 可以兼容安装Chrome生态中的各种应用程序,为Edge未来的发展带来了无限可能~
zhaoolee
2019/05/31
3.1K0
浅析Go-To-Market
Go-To-Market 是一种战略,是如何向市场推出独特的价值主张,以客户群体为目标,并随附路线图向市场介绍产品。 这一战略可以包含许多组成部分,包括销售覆盖范围、流程、运营、客户服务和定价,以及更具战术性的东西,比如信息传递和营销活动,以加强市场的独特地位。
半吊子全栈工匠
2018/12/06
4K0
浅析Go-To-Market
Microsoft Operations Management Suite 配置网络性能监视
接上一篇,Microsoft Operations Management Suite 启用NPM网络性能监视 在OMS中添加NPM功能,下面内容将继续进行NPM功能配置。
李珣
2019/03/14
3730
Burp Suite安全测试神器安装以及配置
Burp Suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们自动化地或手工地能更好的完成对web应用的渗透测试和攻击。在渗透测试中,我们使用Burp Suite将使得测试工作变得更加容易和方便,即使在不需要娴熟的技巧的情况下,只有我们熟悉Burp Suite的使用,也使得渗透测试工作变得轻松和高效。
用户7466307
2020/06/16
1K0
iOS在程序中控制系统的屏幕亮度
在iOS5.0以下,在程序中是不能直接设置系统屏幕亮度的,到了ios5.0以后将这个api开放给了开发者,这样我们就可以非常方更的更改系统屏幕的亮度, 使用方法也很简单 ,如下: 获取系统屏幕当前的亮度值 float value = [UIScreen mainScreen].brightness; 设置系统屏幕的亮度值 [[UIScreen mainScreen] setBrightness:value];</pre>
用户7705674
2021/10/29
1.3K0
点击加载更多

相似问题

拒绝用户“root”的docker phppyadmin容器访问

20

拒绝用户“root”Mysql容器的访问

24

podman容器MySQL容器-拒绝用户'root'@'localhost‘的访问

27

运行docker容器非root用户权限被拒绝

13

Docker容器(Kubernetes):拒绝Mysql用户访问

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文