【问题标题】:Returning promise inside loop does not stop the loop在循环内返回承诺不会停止循环
【发布时间】:2018-12-03 18:07:21
【问题描述】:

以下方法应该返回一个被拒绝的一个已解决的承诺,但它似乎同时返回:

function isNotAlreadyRegistered(newsletterJsonArray, parsedJson){
const emailAsId = parsedJson["email"];

    newsletterJsonArray.forEach(function(entry) {
        if( entry["email"] == emailAsId){
            console.log("User already registered.");
            return Promise.reject();
        }
    });
    console.log("User not registered.")
    return Promise.resolve();
}

该方法记录两条消息:

  1. “用户已注册。”
  2. “用户未注册。”

所以在下面我无法处理承诺。我错过了哪一点?

【问题讨论】:

  • “我错过了哪一点?”从forEach iteratee 返回任何内容都不会停止循环。除非你抛出错误,否则你无法停止它。
  • return Promise.reject(); 这将从您的匿名函数 function(entry) 返回,而不是 isNotAlreadyRegistered

标签: node.js asynchronous es6-promise


【解决方案1】:

您不能通过返回任何内容来停止 forEach 循环。阻止它的唯一方法是抛出一个错误,这是不推荐的逻辑方法。

您可以改用Array.prototype.some

function isNotAlreadyRegistered(newsletterJsonArray, parsedJson){
  const emailAsId = parsedJson.email;
  return newsletterJsonArray.some(function(entry) {
    return entry.email === emailAsId
  }) ? Promise.reject() : Promise.resolve();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多