JS forEach方法正在中断,如何排除故障?

时间:2017-07-07 15:56:04

标签: javascript node.js foreach

这是我的代码。当我评论getContentKWs时,它会转到27,当我不在时,它会在11处停止.poss.s也会说27.我不知道如何解决这个问题。我把控制台日志放在各处,我看不到任何有用的东西。我认为打破forEach方法是不可能的。

getAllPosts().then((posts) => {
    console.log("LENGTH", posts.length)
    posts
        .forEach( (post, i) => {
            console.log(i, post.title)
            getContentKWs(getTitleKWs(post.title), post.content)
        })

})

这是功能:

function getContentKWs(titleKeywords, postContent) {
    titleKeywords
        .some((keyword) => { //loop through keywords to find a good anchor text
            var keywordRegex = new RegExp("(" + keyword + ".+? ......+?) ", "i"); //make regex
            var match = keywordRegex.exec(postContent)
            if (match) {console.log("FOUND MATCH", match[0]); return match[0]} // found match
            else {console.log("NO MATCH",keyword); return false} // not found
        })
}

1 个答案:

答案 0 :(得分:2)

您可能会在.then()处理程序捕获的某处抛出异常。您可以通过在.forEach()中添加try / catch来查看正在发生的事情。

但是,您应该在.catch()之后始终拥有.then(),并且也会显示例外情况。

getAllPosts().then((posts) => {
    console.log("LENGTH", posts.length)
    posts.forEach( (post, i) => {
        console.log(i, post.title)
        getContentKWs(getTitleKWs(post.title), post.content)
    })

}).catch(function(err) {
    console.log(err);
});

所有基于标准的.then()实现都会自动捕获抛出的异常并将其转换为被拒绝的承诺,因此如果您不想意外地吃掉/错过异常,则应始终拥有.catch()个处理程序在每个承诺链的某个地方。

getContentKWs()函数出现错误的一种可能性是keyword包含的某些字符会使这些字符在未转义时无效。如果给出了无效的正则表达式,RegExp构造函数将抛出异常。