首页 > 其他分享 >记录--如何解决异步请求中的返回值问题

记录--如何解决异步请求中的返回值问题

时间:2023-09-14 18:11:38浏览次数:34  
标签:异步 请求 getParams -- res flvPlayer configIP 返回值

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

在 Web 开发中,异步请求是一个常见的操作。然而,在异步请求中正确地获取返回值却可能会变得棘手。本文将介绍如何解决异步请求中的返回值问题,并提供一种解决方案。

一、问题描述

在某个 Web 应用程序中,用户遇到了无法正确获取异步请求返回值的问题。具体来说,用户在第一个异步请求中设置了 configIP 变量的值,然后在第二个异步请求中使用了该变量,但是无法正确地获取到其值。

示例:我在js里写这段代码,但是总获取不到configIP这个参数,有的时候会变成127.0.0.1,有的时候会变成正确的,如何解决这个问题?

    var configIP = "";
    $(function () {
        $.ajax({
            url: '/dev-api/system/config/configKey/camera.request.ip',
            beforeSend: function (request) {
                request.setRequestHeader("Authorization", "Bearer " + getCookie("Admin-Token"));
            },
            success: (res) => {
                console.log(res);
                this.configIP = res.msg;
                configIP = res.msg;
                $.ajax({
                    url: `http://${configIP}:800/index/api/addStreamProxy`,
                    data: {
                        "vhost": `${configIP}`,
                        "app": "live",
                        "stream": getParams("orderNum"),
                        "url": "rtsp://admin:" + `${getParams("password")}@${getParams("ip")}`
                    },
                    success: (res) => {
                        start()
                    }
                });

            }
        })
    });
    function start(configIP) {
    if (flvjs.isSupported()) {
        var videoElement = document.getElementById('videoElement');
        var flvPlayer = flvjs.createPlayer({
            type: 'flv',
            url: `http://${configIP}:800/live/${getParams("orderNum")}.flv`
        });
        flvPlayer.attachMediaElement(videoElement);
        flvPlayer.load();
        flvPlayer.play();
    }
}

二、问题分析

这个问题可能是由于异步请求导致的,因为 $.ajax 是一个异步请求,所以在 $.ajax 请求执行完成之前,configIP 的值不会被更新。

当使用异步请求时,代码会在请求发送之后继续执行,而不会等待请求返回数据。这就意味着,如果在请求成功之前尝试使用返回的数据,它将不可用。

三、解决方案

在请求成功后尝试将 res.msg 赋值给 configIPthis.configIP,但是由于异步请求的原因,这些值可能会在请求成功之前被使用。因此,可能无法正确地获取 res.msg 值。

可以尝试在第二个 $.ajax 请求中直接使用 res.msg,而不是将其赋值给 configIPthis.configIP,这样可以避免异步请求的问题,并正确地获取 res.msg 值。

$.ajax({
    url: '/dev-api/system/config/configKey/camera.request.ip',
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", "Bearer " + getCookie("Admin-Token"));
    },
    success: (res) => {
        console.log(res);
        $.ajax({
            url: `http://${configIP}:800/index/api/addStreamProxy`,
            data: {
                "vhost": `${res.msg}`,
                "app": "live",
                "stream": getParams("orderNum"),
                "url": "rtsp://admin:" + `${getParams("password")}@${getParams("ip")}`
            },
            success: (res.msg) => {
                start()
            }
        });
    }
});
    function start(configIP) {
    if (flvjs.isSupported()) {
        var videoElement = document.getElementById('videoElement');
        var flvPlayer = flvjs.createPlayer({
            type: 'flv',
            url: `http://${configIP}:800/live/${getParams("orderNum")}.flv`
        });
        flvPlayer.attachMediaElement(videoElement);
        flvPlayer.load();
        flvPlayer.play();
    }
}

同时getConfigIP() 函数获取了 configIP,并将其作为回调函数的参数传递给 start() 函数。在 start() 函数中,我们使用 configIP 来设置 flvPlayer 的 URL。

在异步请求中正确地获取返回值可能会变得棘手。为了解决这个问题,我们可以将异步请求的回调函数嵌套起来,或者将参数传递给下一个异步请求的回调函数。这些方法都可以确保异步请求的返回值在使用时已经被正确地设置。

本文转载于:

https://juejin.cn/post/7277836718761508916

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

标签:异步,请求,getParams,--,res,flvPlayer,configIP,返回值
From: https://www.cnblogs.com/smileZAZ/p/17703116.html

相关文章

  • 内网穿透
    目录内网穿透简介ngrok单服务本地服务开启代理验证多服务本地服务前端后端配置文件启动服务内网穿透简介内网服务通过代理隧道(特定代理工具)实现在外网也可以访问相关的技术称为内网穿透当然有公网IP可以直接使用作为服务的IP(根据办理宽带运营商不同通常需要咨询运营商......
  • Knative Serving v1.11.0 部署
    先决条件如果集群中只有一个节点,则至少需要6个CPU、6GB内存和30GB磁盘存储。如果集群中有多个节点,则每个节点至少需要2个CPU、4GB内存和20GB磁盘存储。您有一个使用Kubernetesv1.24或更高版本的集群。部署KnativeServing流程1.部署Service自定义资源......
  • 魔法函数
    魔法函数是Python中特殊命名的函数,用于实现特定的功能或操作。它们以双下划线开头和结尾,例如__init__和__str__。魔法函数在类中被调用,以执行与对象创建、运算符重载、属性访问等相关的操作。以下是一些常用的魔法函数及其功能:__init__(self,...):初始化方法,在创建对象时被......
  • paddlespeech asr脚本demo
     概述paddlespeech是百度飞桨平台的开源工具包,主要用于语音和音频的分析处理,其中包含多个可选模型,提供语音识别、语音合成、说话人验证、关键词识别、音频分类和语音翻译等功能。本文介绍利用ps中的asr功能实现批量处理音频文件的demo。环境centos7.9Python3.10.3paddl......
  • OkHttp3发送http请求
    导入依赖<!--https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp--><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version&......
  • SpeexDsp回音消除的一些理解
    1.speexdsp的变量定义:SpeexEchoState*echo_state=NULL;//回声消除变量SpeexPreprocessState*pre_state=NULL;//噪声抑制变量intsampleRate=16000;//16k采样率2.speexdsp的初始化:echo_state=speex_echo_state_init(256,2048);//回音消除初始化参数说明:256为每次算......
  • ArcGIS API for JS4.8绘制点、线、面、矩形、圆
    实现代码使用ArcGISAPIforJS4.8绘制点(Point)、线(Polyline)、面(Polygon)、矩形(Rectangle)、圆(Circle),使用Draw绘制,具体代码如下:<!DOCTYPEhtml><html><head><metacharset="utf-8"/><title>ArcGISdemo</title><linktyp......
  • Mysql存储引擎,你了解几个?
    引言MySQL是一种流行的关系型数据库管理系统(RDBMS),它支持多种不同的数据库引擎。数据库引擎是用于存储、管理和检索数据的核心组件,它们直接影响着数据库的性能、可靠性和功能,接下来本文介绍下一些常见的MySQL数据库引擎。存储引擎InnoDB引擎InnoDB是MySQL默认的事务性数据库引......
  • GLM-130B 部署 - 8*3090-24G
    官方文档镜像要求A100-40G-8卡硬件配置:软件配置:1.准备由于恒源云暂时缺少硬件资源,此次部署使用8*3090-24G配置(需要量化int8):注意镜像选择,pytorch版本选择1.13,不要选择2.0,2.0会产生不兼容的情况。同时需要注意扩容,否则模型存放不够空间创建实例后,打开终端,下载模型到临......
  • Flipper 调试 react native 项目
    一、安装:1.在官网下载桌面应用Flipper官网地址FlipperGitHub首页2.打开程序,执行setupdoctor检测环境是否缺失参考官方文档二、使用全部安装完以后启动reactnative项目,flipper会检测到运行中的项目模拟器以expo构建的项目为例:1.安装expo-dev-client构建开......