javascript - Array.every() - 可以在回调中返回吗?

标签 javascript arrays node.js

我正在解析一个输入文件并使用 Array.every 函数运行每个元素。根据结构,需要用户手动输入。 因此,如果您有这样的例子:

configData.users.every(function(user){
 if(user.enabled == 1){
    if(user.mobile == 1){
        prompt.start();
        prompt.get(['mCode'], function (err, result) {
         //Do something...
         //return needed here!
        });
    }else{
        //Do something else...
        return true;
    }
 }
});

所以在我的例子中,提示符是在用户输入输入时调用回调函数。此时,哪里很清楚并且可以处理下一个元素。那么此时如何调用 return 来继续 every() 函数呢?

感谢您的帮助。

最佳答案

您无法同步执行异步操作,而这本质上正是您想要做的。正如评论中提到的, promise 是最好的方法。如果想直接写,最简单的做法是:

function handle_users(users) {
  var i = 0;
  function _internal() {
    if (i >= users.length) return;
    var user = users[i];
    if (user.enabled == 1) {
      if (user.mobile == 1) {
        prompt.start();
        prompt.get(['mCode'], function (err, result) {
          //Do something...
          //return needed here!
          i++;
          _internal();
        });
      } else {
        i++; 
        _internal();
        return true;
      }
   }
   internal();
}

我们定义了一个内部函数,我们从 prompt.get 的回调中以某种递归方式调用该函数。

如果你想获取所有用户都符合资格或者输入了正确的关键字或者其他什么信息,那么在顶层保留一个 bool 变量,失败时将其设置为 false,然后从函数返回的地方。或者,如果您想在第一次失败时停止处理,就像 every 那样,您可以在 _internal 顶部进行检查并立即返回。

关于javascript - Array.every() - 可以在回调中返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238678/

相关文章:

javascript - 如何在我的代码中进一步使用生成的ID(javascript)

javascript - 处理 jQuery 上的可排序列表

node.js - Mongoose :如何添加多个插件

javascript - 在A "Class"中定义一个函数并调用它来打印数组元素

node.js - 在nodejs中创建workerThread时,它是否利用与nodejs进程运行所在的内核相同的内核?

node.js - 如何使用 Jade 在迭代中使用条件?

javascript - 如果链中的所有对象都存在则获取值,如果不存在则获取回退值

javascript - 使用数字数组和 json 元素数组时,D3 条形图看起来不同

java - 使用字段名称为对象设置字段(Java 反射)

arrays - bash 数组给了我不需要的前缀