使用 `replace` 和 Node.js 函数

奥利布里顿

我正在尝试编写一些代码,该代码将包含一个包含部分 URL 的字符串google.com,并将它们转换为一个完整的 URL,如https://google.com.

我对 Node.js 非常缺乏经验,而且我仍在尝试理解异步的想法。

我正在尝试使用回调而不是像 promises 和 async/await 这样的东西,在我的脑海中,以下代码应该可以工作:

exports.rectifyDocumentURLs = function(baseUrl, document, callback) {
    callback(null,
        document.replace(url_patterns.any, (match) => {
            return exports.fixUrl(match, baseUrl, (err, res) => {
                if (err) {
                    callback(err, null)
                }

                return res
            })
        })
    )
}

url_patterns.any是一些匹配任何类型代码的正则表达式代码,函数exports.fixUrl是一个函数,它将获取部分 URL 并以完整形式返回它。

当我像这样运行代码时

exports.rectifyDocumentURLs("https://google.com", "google.com", (rectifyErr, rectifyRes) => {
    console.log(rectifyRes)
})

当前的代码只是返回undefined,但res该的fixUrl函数返回正确的结果,http://google.com

我知道这很像这里的许多问题,但经过广泛的研究和多次尝试和重写,我相信这可能是修复代码的唯一方法。

任何帮助将不胜感激。

标记

你的功能rectifyDocumentURLs()都搞砸了。

回调的想法是什么时候异步发生,你不知道什么时候完成。所以你传递给它一个函数,当它完成时,它调用你传递给它的函数,并得到你想要的结果。通常,接受回调的函数永远不会返回有意义的值——该值被传递给回调。rectifyDocumentURLs()您立即调用回调,然后使用另一个函数的回调再次调用它并返回一个(可能未定义的)值。那是行不通的。

这是一个更标准的方法:

exports.rectifyDocumentURLs = function(baseUrl, document, callback) {
    // it looks like document.replace is async and takes a callback 
    // when it's done it will pass its result to the callback as match  
    document.replace(url_patterns.any, (match) => {
        // you don't need return the result of a function that takes a callback
       // it will pass its result to the callback
        exports.fixUrl(match, baseUrl, (err, res) => {
            if (err) {
                callback(err, null)
            } else {
                // now that you have res and no error, call the callback
                // you passed to rectifyDocumentURLs()
                // this value will be the rectifyRes in the function you passed
                callback(null, res)
            }
        })
    })
}

当然,正如其他人指出的那样,已经有很多处理 URL 的现有代码,但这是一个很好的练习。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用函数和.replace

来自分类Dev

Node JS嵌套函数和变量范围

来自分类Dev

在 Node.js 中使用 WriteStream 和 replace-in-file 写入时出现问题

来自分类Dev

使用JS对象和函数

来自分类Dev

安装和使用Node JS

来自分类Dev

安装和使用Node JS

来自分类Dev

使用Node.js和回调函数的代码是否与Java线程相同?

来自分类Dev

我如何期望在Node.js中使用sinon,mocha和chai的特定参数调用函数?

来自分类Dev

使用异步node.js函数控制流和错误处理

来自分类Dev

使用Node.js和回调函数的代码是否与Java线程相同?

来自分类Dev

如何使用 node js util.promisify 和 writeFile fs 函数并等待

来自分类Dev

无法使用 mongoose、node.js、express 和 async 函数更新文档数据

来自分类Dev

在Node.js中使用匿名函数

来自分类Dev

使用Node.Js的Lambda函数

来自分类Dev

使用 Node js Await/Async 函数

来自分类Dev

如何使用Node.js,Express.js和Bluebird调用第二个“外部”函数

来自分类Dev

如何使用 node.js 函数检查我的 vm 实例在 google-cloud 中使用了多少 CPU 和内存

来自分类Dev

使用 MySQL REPLACE 和 CONCAT 函数的 Hibernate Criteria Query

来自分类Dev

在Node.js中导出变量和函数

来自分类Dev

node.js stdout clearline()和cursorTo()函数

来自分类Dev

node.js模块和函数中“ this”的含义

来自分类Dev

TypeError:不是Node和Express JS的构造函数

来自分类Dev

限制Node.js和TypeScript中的函数参数的类型

来自分类Dev

带有 sequelize 和 node js 的 Mysql 原生空间函数

来自分类Dev

TypeError:count 不是 node.js 和 sequelize 中的函数

来自分类Dev

使用node.js和mongoose的mapReduce

来自分类Dev

使用Node JS和MongoDB过滤查询

来自分类Dev

Netbeans和Node.js使用

来自分类Dev

Node js,函数执行

Related 相关文章

  1. 1

    使用函数和.replace

  2. 2

    Node JS嵌套函数和变量范围

  3. 3

    在 Node.js 中使用 WriteStream 和 replace-in-file 写入时出现问题

  4. 4

    使用JS对象和函数

  5. 5

    安装和使用Node JS

  6. 6

    安装和使用Node JS

  7. 7

    使用Node.js和回调函数的代码是否与Java线程相同?

  8. 8

    我如何期望在Node.js中使用sinon,mocha和chai的特定参数调用函数?

  9. 9

    使用异步node.js函数控制流和错误处理

  10. 10

    使用Node.js和回调函数的代码是否与Java线程相同?

  11. 11

    如何使用 node js util.promisify 和 writeFile fs 函数并等待

  12. 12

    无法使用 mongoose、node.js、express 和 async 函数更新文档数据

  13. 13

    在Node.js中使用匿名函数

  14. 14

    使用Node.Js的Lambda函数

  15. 15

    使用 Node js Await/Async 函数

  16. 16

    如何使用Node.js,Express.js和Bluebird调用第二个“外部”函数

  17. 17

    如何使用 node.js 函数检查我的 vm 实例在 google-cloud 中使用了多少 CPU 和内存

  18. 18

    使用 MySQL REPLACE 和 CONCAT 函数的 Hibernate Criteria Query

  19. 19

    在Node.js中导出变量和函数

  20. 20

    node.js stdout clearline()和cursorTo()函数

  21. 21

    node.js模块和函数中“ this”的含义

  22. 22

    TypeError:不是Node和Express JS的构造函数

  23. 23

    限制Node.js和TypeScript中的函数参数的类型

  24. 24

    带有 sequelize 和 node js 的 Mysql 原生空间函数

  25. 25

    TypeError:count 不是 node.js 和 sequelize 中的函数

  26. 26

    使用node.js和mongoose的mapReduce

  27. 27

    使用Node JS和MongoDB过滤查询

  28. 28

    Netbeans和Node.js使用

  29. 29

    Node js,函数执行

热门标签

归档