一个实现案例



//简便写法

const axios = require('axios');

async function fetchDataWithPolling(url, timeout = 2000, interval = 100) {
  let elapsed = 0; // 用于记录已经经过的时间

  const sendRequest = async () => {
    try {
      const response = await axios.get(url); // 发送 HTTP GET 请求
      if (response.data) {
        return response.data; // 如果请求成功,返回数据
      }
    } catch (error) {
      console.error('Request failed:', error.message); // 如果请求失败,输出错误信息
      return null;
    }
  };

  const poll = async () => {
    while (elapsed < timeout) {
      const requestPromise = sendRequest();

      // 等待指定的间隔时间(例如 100ms)
      await new Promise(resolve => setTimeout(resolve, interval));
      elapsed += interval;

      const result = await requestPromise;
      if (result) {
        return result; // 如果成功获取数据,返回数据
      }
    }
    return null; // 如果在超时时间内未成功获取数据,返回 null
  };

  return new Promise(async (resolve, reject) => {
    const result = await Promise.race([
      poll(),
      new Promise((_, reject) => setTimeout(() => reject('Failed to receive data within the timeout period.'), timeout))
    ]);

    if (result) {
      resolve(result); // 成功获取数据后,resolve Promise 并返回数据
    } else {
      reject('Failed to receive data within the timeout period.'); // 超时后,reject Promise
    }
  });
}

// 示例调用
fetchDataWithPolling('https://jsonplaceholder.typicode.com/posts/1')
  .then(data => {
    console.log('Final received data:', data);
  })
  .catch(error => {
    console.error(error);
  });

----------------------------------------------------------------------------------------


const axios = require('axios');

async function fetchDataWithPolling(url, timeout = 2000, interval = 100) {
  let success = false;        // 用于标识是否成功获取数据
  let elapsed = 0;            // 用于记录已经经过的时间
  let pendingRequests = [];   // 用于跟踪所有未完成的请求
  let resultData = null;      // 用于存储成功获取到的数据

  const sendRequest = async () => {
    try {
      const response = await axios.get(url); // 发送 HTTP GET 请求
      if (response.data) {
        success = true;                      // 如果请求成功,设置 success 为 true
        resultData = response.data;          // 存储成功获取到的数据
        console.log('Data received:', response.data); // 输出接收到的数据
        pendingRequests = [];                // 清空所有 pending 请求,避免继续检查
      }
    } catch (error) {
      console.error('Request failed:', error.message); // 如果请求失败,输出错误信息
    }
  };

  return new Promise(async (resolve, reject) => {
    while (!success && elapsed < timeout) {
      // 发送一个新的请求并添加到 pending 请求列表
      const requestPromise = sendRequest();
      pendingRequests.push(requestPromise);

      // 等待指定的间隔时间(例如 100ms)
      await new Promise(resolve => setTimeout(resolve, interval));
      elapsed += interval;

      // 检查所有 pending 请求的状态
      await Promise.all(pendingRequests).then(() => {
        if (success) {
          // 如果有请求成功,跳出循环
          return;
        }
      });
    }

    if (success) {
      resolve(resultData); // 成功获取数据后,resolve Promise 并返回数据
    } else {
      reject('Failed to receive data within the timeout period.');
    }
  });
}

// 示例调用
fetchDataWithPolling('https://jsonplaceholder.typicode.com/posts/1')
  .then(data => {
    console.log('Final received data:', data);
  })
  .catch(error => {
    console.error(error);
  });



----------------------------------------------------------------------------------------

const axios = require('axios');

async function fetchDataWithPolling(url, timeout = 2000, interval = 100) {
  let success = false;        // 用于标识是否成功获取数据
  let elapsed = 0;            // 用于记录已经经过的时间
  let pendingRequests = [];   // 用于跟踪所有未完成的请求
  let responseData = null;    // 用于存储成功获取到的数据

  const sendRequest = async () => {
    try {
      const response = await axios.get(url); // 发送 HTTP GET 请求
      if (response.data) {
        success = true;                      // 如果请求成功,设置 success 为 true
        responseData = response.data;        // 存储成功获取到的数据
        console.log('Data received:', responseData); // 输出接收到的数据
        pendingRequests = [];                // 清空所有 pending 请求,避免继续检查
      }
    } catch (error) {
      console.error('Request failed:', error.message); // 如果请求失败,输出错误信息
    }
  };

  while (!success && elapsed < timeout) {
    // 发送一个新的请求并添加到 pending 请求列表
    const requestPromise = sendRequest();
    pendingRequests.push(requestPromise);

    // 等待指定的间隔时间(例如 100ms)
    await new Promise(resolve => setTimeout(resolve, interval));
    elapsed += interval;

    // 检查所有 pending 请求的状态
    await Promise.all(pendingRequests).then(() => {
      if (success) {
        // 如果有请求成功,跳出循环
        return;
      }
    });
  }

  if (!success) {
    console.log('Failed to receive data within the timeout period.');
  }

  return responseData; // 返回成功获取到的数据或 null
}

// 示例调用
fetchDataWithPolling('https://jsonplaceholder.typicode.com/posts/1')
  .then(data => {
    if (data) {
      console.log('Received data:', data);
    } else {
      console.log('No data received.');
    }
  })
  .catch(error => {
    console.error('Error during polling:', error);
  });

-----------------------------------------------------------------------------------------



const axios = require('axios');

async function fetchDataWithTimeout(url, timeout = 2000, interval = 100) {
  let success = false;        // 用于标识是否成功获取数据
  let elapsed = 0;            // 用于记录已经经过的时间
  let pendingRequests = [];   // 用于跟踪所有未完成的请求

  // 定义一个异步函数来发送请求
  const sendRequest = async () => {
    try {
      const response = await axios.get(url); // 发送 HTTP GET 请求
      if (response.data) {
        success = true;                      // 如果请求成功,设置 success 为 true
        console.log('Data received:', response.data); // 输出接收到的数据
        pendingRequests = [];                // 清空 pendingRequests 数组
      }
    } catch (error) {
      console.error('Request failed:', error.message); // 如果请求失败,输出错误信息
    }
  };

  // 循环直到成功获取数据或达到超时
  while (!success && elapsed < timeout) {
    const requestPromise = sendRequest();   // 发送一个新的请求并获取 Promise
    pendingRequests.push(requestPromise);   // 将 Promise 添加到 pendingRequests 数组

    await new Promise(resolve => setTimeout(resolve, interval)); // 等待指定的间隔时间(100ms)
    elapsed += interval;                    // 增加已经过的时间

    await Promise.all(pendingRequests).then(() => { // 等待所有 pending 请求完成
      if (success) {
        return; // 如果有请求成功,跳出循环
      }
    });
  }

  if (!success) {
    console.log('Failed to receive data within the timeout period.'); // 如果超时未成功,输出错误信息
  }
}

// 示例调用
fetchDataWithTimeout('https://api.example.com/data');
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark MLlib是一个基于Spark的机器学习库,它提供了包括分类、回归、聚类、推荐等多种机器学习算法,同时还提供了特征提取、数据预处理、模型评估等功能。下面是一个用户画像的实现案例: 1. 数据准备 首先需要准备用户数据,包括用户的基本信息、行为数据、社交网络数据等。这些数据可以从多个渠道获取,如用户注册信息、用户行为日志、社交媒体数据等。 2. 特征提取 对于用户数据,需要进行特征提取,提取出用户的各种属性特征,如年龄、性别、地域、教育程度、职业等基本信息特征,以及用户的行为数据特征,如购买行为、浏览行为、搜索行为等。这些特征可以通过Spark MLlib提供的特征提取算法进行提取。 3. 数据清洗和预处理 对于提取出来的特征数据,需要进行数据清洗和预处理。这包括对缺失值和异常值的处理,以及对数据进行标准化、归一化等操作。 4. 建立模型 在数据预处理完成之后,需要根据用户的特征数据建立用户画像模型。可以使用Spark MLlib提供的分类、聚类等算法进行模型训练和建模。 5. 模型评估和优化 建立好模型之后,需要对模型进行评估和优化。可以使用Spark MLlib提供的模型评估算法进行模型评估,如交叉验证、ROC曲线等。如果模型效果不理想,可以对模型参数进行调整,或者选择其他模型算法进行优化。 6. 用户画像应用 最后,可以将建立好的用户画像模型应用到实际业务场景中,如根据用户画像进行个性化推荐、精准营销等。可以将用户画像模型集成到Spark Streaming、Spark SQL等Spark组件中,实现实时的用户画像分析和应用。 以上是一个基于Spark MLlib的用户画像实现案例,其中涉及到了数据准备、特征提取、数据清洗和预处理、建立模型、模型评估和优化、以及用户画像应用等多个环节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值