8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

useQueries 失去了并行查询数据的能力,因为 Next.js 要求服务器组件异步

Abdul Qadeer 3月前

121 0

该应用程序由 Next.js 运行。我有一个 useQueries 钩子:const userQueries = useQueries({ queries: user.contacts.map((contactId: string) => ({ queryKey: ['contact', conta...

该应用程序由 Next.js 运行。

我有一个 useQueries 钩子:

    const userQueries = useQueries({
        queries: user.contacts.map((contactId: string) => ({
            queryKey: ['contact', contactId],
            queryFn: () => getUserById(contactId),
        }))
    });

api.ts 文件中的函数“getUserById”:

export async function getUserById(userId: string) {
    const supabase = createClient();
    let {data} = await supabase
        .from('users')
        .select()
        .eq('id', userId);

    return data && data[0]

}

我发现当我以这种方式加载数据时,它会按顺序加载而不是并行加载。

我尝试将 api 函数设为非异步,以便每个请求不会等待前一个请求,但 Next.js 禁止在没有“async”前缀的情况下执行服务器操作。有办法解决这个问题吗?

帖子版权声明 1、本帖标题:useQueries 失去了并行查询数据的能力,因为 Next.js 要求服务器组件异步
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Abdul Qadeer在本站《typescript》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我正在学习使用 ESP32 的 MQTT 服务器和客户端以及 UDP 协议。当代码中有两个线程时,ESP32 每秒都会重新启动,我遇到这个问题:一个用于发送,一个用于接收......

    我正在学习使用 ESP32 的 MQTT 服务器和客户端以及 UDP 协议。

    当代码中有两个线程时,ESP32 每秒都会重新启动,这是一个问题:一个用于发送 UDP 数据报,一个用于接收 UDP 数据报。有人能帮我解决这个问题吗?

    这是我的代码

    #include <WiFi.h>
        #include "AsyncUDP.h"
        #include <MQTT.h>
        #include <WiFiUdp.h>
        #include <OSCMessage.h>
    
        TaskHandle_t thread;
        
        WiFiClient net;
        const char* ssid = "---"; //some info
        const char* password = "---"; //some info
        
        IPAddress outIp(***, ***, ***, ***); //some info
        const unsigned int outPort = ----; //some info
        
        MQTTClient mqttClient;
        int port = ----; //some info
        long lastMillis = 0;
        String ping = "";
        String address = "";
        bool start = true;
        
        AsyncUDP udp;
        AsyncUDP udpThread;
        AsyncUDPMessage udpMsg;
        
        uint32_t timeConnect;
        uint32_t timeOffset;
        
        void setup() {
          Serial.begin(115200);
        
          xTaskCreatePinnedToCore(
            threadLoop, 
            "Thread",   
            10000,      
            NULL,      
            1,          
            &thread,    
            0);         
        
        
          ConnectToWifi(ssid, password, true);
          Serial.println("Connected to the Wi-Fi network");
        
          ping = GetPing();
          Serial.println(ping);
        }
        
        void loop() {
          OSCMessage msg("/ping");
          msg.add("Some message");
          msg.send(udpMsg);
          msg.empty();
          udp.sendTo(udpMsg, outIp, outPort);
          delay(1000);
        }
        
        void threadLoop(void* pvParameters) {
        
          if (udpThread.listen(port)) {
            String data[2];
            udpThread.onPacket([](AsyncUDPPacket packet) {
              //parse packet
            }
        
            if (data[0] == "***") {
              address = packet.remoteIP().toString(); 
              int addressLen = address.length() + 1;
        
              char broker[addressLen];
              address.toCharArray(broker, addressLen);
        
              mqttClient.begin(broker, net);
              mqttClient.onMessage(Received); //event subscription
        
              char* timeEnd;
              timeConnect = strtol(data[1].c_str(), &timeEnd, 0);
              timeOffset = millis() / 1000ul;
        
              start = true;
            }
          });
        
          while (1) {
            if (start) {
              mqttClient.loop();
              delay(10);
              if (!mqttClient.connected()) {
                ConnectedMQTT();
              }
              if (millis() - lastMillis > 1000) {
                lastMillis = millis();
        
                uint32_t sec = millis() / 1000ul;
                uint32_t time = timeConnect + (sec - timeOffset);
                mqttClient.publish(ping, String(time), true, 0);
              }
            } 
            else {
              udpThread.broadcastTo("***", port);
              delay(1000);
            }
          }
        }
    

    如果我替换这部分代码:

          if (udpThread.listen(port)) {
            String data[2];
            udpThread.onPacket(\[\](AsyncUDPPacket packet) {
              //parse packet
          }
        
          if (data[0] == "***") {
            address = packet.remoteIP().toString(); 
            int addressLen = address.length() + 1;
        
            char broker[addressLen];
            address.toCharArray(broker, addressLen);
        
            mqttClient.begin(broker, net);
            mqttClient.onMessage(Received); //event subscription
        
            char* timeEnd;
            timeConnect = strtol(data[1].c_str(), &timeEnd, 0);
            timeOffset = millis() / 1000ul;
        
            start = true;
          }
        });
    

    有了这个:

        char broker[] = "***, ***, ***, ***"; //some info
        mqttClient.begin(broker, net);
        mqttClient.onMessage(Received); //event subscription
    

    然后 ESP32 停止重启。

    此外,当我仅保留循环方法时,ESP32将停止重启:

        void loop() {       
          OSCMessage msg("/ping");       
          msg.add("Some message");       
          msg.send(udpMsg);      
          msg.empty();      
          udp.sendTo(udpMsg, outIp, outPort);   
          delay(1000);
        }
    
返回
作者最近主题: