gpt4 book ai didi

javascript - 给定一个数组;如何为第一个元素运行函数并有条件地等待、返回或运行下一个元素的函数?

转载 作者:行者123 更新时间:2023-12-03 10:02:48 25 4
gpt4 key购买 nike

我在 Parse Cloud 上有一组函数,用于查询我在外部运行的 Node/mongo API。

其中一个函数为我提供了一组事件用户 objectId,其中每个都映射到按距离排序的消息 channel 名称。

我需要获取这个 objectId 数组并从第一个元素开始:

  1. 发送消息;
  2. 设置超时(我会在测试时尝试 30 秒,但在产品中可能会更长);
  3. 如果在超时期间我收到“不可用”响应,则放弃剩余时间,转到下一个元素并返回到 1;
  4. 如果在超时期间我收到“可用”响应,则退出循环,忘记所有其他元素并返回成功。
  5. 如果我根本没有得到任何响应,则返回失败。

我不确定 Parse CloudCode 是否是适合这项工作的工具,因此我标记了 Node ,以防我需要将逻辑放入 API 中。

JS 在这方面还很年轻,所以有一点深度或让我学到一些东西来回答我的问题的答案会受到赞赏和赞成。

最佳答案

这是一个控制流问题,一个选项是异步包或 Promise 库。

让我们看看异步库。我们可以通过 detectSeries 来解决这个问题功能。

//Might need this, if you need to stop the processing when it wasn't really a success, 
//since detectSeries doesn't handle errors
var specialFlag = false;

function doYourLogic( item, callback ){
sendMessage( item.whatever, function( err, result ){
if( result.status === 'available' ){
//flag this item as the one that worked. This will break the detectSeries
callback(true);
}
//whether any other error, just move on to the next
callback(false);

}
}

//Iterate over the entire collection, running the function 'doYourLogic' on each item,
//where 'finalDetect' is called once everything is done
//(either a single item passed the test, or all failed and the result is undefined)
async.detectSeries( collection, doYourLogic,
function finalDetect( result ){
if( result === undefined ){
//none of the items returned true, so nothing passed
}
//the result is the item that was successful
var usefaulData = result.field1;
}

我们可以使用其他一些异步函数来解决这个问题,但该包的想法是管理所有这些异步调用的控制流 - 并确保它们按顺序发生。 Promise 库可能也有帮助,但没有必要,而且目前可能不值得这么麻烦。

关于javascript - 给定一个数组;如何为第一个元素运行函数并有条件地等待、返回或运行下一个元素的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30504807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com