第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

異步長(zhǎng)時(shí)間運(yùn)行操作 API 調(diào)用

異步長(zhǎng)時(shí)間運(yùn)行操作 API 調(diào)用

慕容森 2023-08-15 17:16:06
我的 React 應(yīng)用程序中有一個(gè)函數(shù)可以將數(shù)據(jù)發(fā)送到我的 Django API。一旦收到數(shù)據(jù),django 就會(huì)調(diào)用外部 python 函數(shù)來(lái)執(zhí)行一些代碼。目前,我的 javascript 在收到響應(yīng)時(shí)會(huì)發(fā)出警報(bào)ok。然而,在外部函數(shù)完成之前,Django 不會(huì)發(fā)送此響應(yīng);這是一個(gè)問(wèn)題,因?yàn)楦鶕?jù)用戶的輸入,外部函數(shù)可能需要長(zhǎng)達(dá)一個(gè)小時(shí)的時(shí)間才能運(yùn)行。是否可以將其更改為在外部 python 代碼開始成功運(yùn)行時(shí)發(fā)出一個(gè)警報(bào),并在函數(shù)完成時(shí)發(fā)出第二次警報(bào)?我知道將數(shù)據(jù)發(fā)送到 API 時(shí)可能會(huì)失敗,API 可能由于數(shù)據(jù)類型不匹配而無(wú)法訪問(wèn)數(shù)據(jù),最后如果數(shù)據(jù)與外部函數(shù)不兼容。我正在尋找異步函數(shù) React 的 3 種不同響應(yīng)
查看完整描述

2 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

export const SendData = (url, props) =>{ //this url is the url to the DataInput api view

    const data1 = document.getElementById('data1')

    const data2 = document.getElementById('data2')


    async function postData() {

        var res = ''

        const options ={

            method : 'POST',

            headers: {

                'Accept': 'application/json',

                'Content-Type': 'application/json;charset=UTF-8'

            },

            body: JSON.stringify({

            data_one: data1,

            data_two: data2

            })

        }

        const response = await fetch(url, options)

            .then(response => {

                if (response.ok) {

                    alert("Data Sent!")

                }

                else {

                    alert("An error has occurred.\nWere all fields filled out?")

                }

            });

    }       

    postData()

};

models.py


class DataInput(models.Model):

    data_one = models.IntegerField(

        max_length=30,

        default=5)

    data_two = models.IntegerField(

        max_length=30,

        default=4)


class OtherData(models.Model):

    other_data = models.IntegerField(

        max_length=5,

        default=10)


@receiver(post_save, sender=DataInput, dispatch_uid="extra function")

def extra_function(sender, instance, created, *args, **kwargs):

    #dummy function to show reliance on data

    for i in OtherData[0].other_data:

        print(instance.data_two + instance.data_one)

serializer.py


from rest_framework import serializers

from .models import DataInput

from .models import OtherData

class DataSerializer(serilizers.ModelSerializer):

    class Meta:

        model = DataInput

        fields = ('data_one', 'data_two')

class OtherDataSerializer(serializer.ModelSerializer):

    class Meta:

        model = OtherData

        fields = ('other_data')


查看完整回答
反對(duì) 回復(fù) 2023-08-15
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

最好避免在同一 (http) 連接中同步等待長(zhǎng)時(shí)間運(yùn)行的操作的響應(yīng)。特別是在瀏覽器中,因?yàn)樗鼈兛赡軙?huì)導(dǎo)致超時(shí)(取決于瀏覽器,但通常為 1-5 分鐘)

解決方案之一是使用 HTTP 輪詢。該技術(shù)的詳細(xì)解釋可以在這里找到:

  • 帶輪詢的長(zhǎng)時(shí)間運(yùn)行操作

  • 異步請(qǐng)求-應(yīng)答模式

正如您在第二個(gè)鏈接中可以找到的,您的 API 應(yīng)在開始長(zhǎng)時(shí)間運(yùn)行的流程之前驗(yàn)證請(qǐng)求和要執(zhí)行的操作。如果請(qǐng)求無(wú)效,請(qǐng)立即回復(fù)錯(cuò)誤代碼,例如 HTTP 400(錯(cuò)誤請(qǐng)求)。在其他情況下,將任務(wù)分配給后臺(tái)工作人員(例如?django-q),并使用反應(yīng)應(yīng)用程序可以輪詢等待作業(yè)結(jié)果的位置進(jìn)行響應(yīng)。


查看完整回答
反對(duì) 回復(fù) 2023-08-15
  • 2 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)