Node.js - 如何使用回调调用异步函数?

标签 node.js asynchronous mongoose callback

下面的异步函数应该检查 url 是否是合法的 url

let CheckUrl = function (url, done) {
  dns.lookup(url, function(err, address) { 
    if (err) return done(err);
    done(null, true); //return true because I don't care what the address is, only that it works
  });
} 

下面的express.js代码获取了url,但我无法理解如何编写if语句以使其返回true或false。

// Gets URL 
app.post("/api/shorturl/new", function(req, res) {
  if (CheckUrl(req.body.url)) {
    // do something
  }
});

我不确定在这个 if 语句中的 CheckUrl() 中传递什么作为第二个参数。或者也许我一开始就错误地编写了第一个异步函数?

最佳答案

请使用 async await

我给你写了一个测试代码如下:

const express = require('express');
const app = express();
const dns = require('dns');


let CheckUrl = function (url, done) {
    return new Promise((resolve, reject) => {
        dns.lookup(url, function(err, address) {
            console.log("err " , err)
            if (err) {
                resolve(false)
            } else {
                resolve(true)
            }

        });
    });
} 


app.post("/api/shorturl/new", async function(req, res) {

  try {

    let result = await CheckUrl(req.body.url);
    console.log("result " , result)
    res.send(result)
  }
  catch (error) {
    console.log("in catch error " , error)
    res.send(error)
  }
});

app.listen(3000)

您可以获取有关Promise的知识here 。 Promise 对象表示异步操作的最终完成(或失败)及其结果值。

关于Node.js - 如何使用回调调用异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60314287/

相关文章:

node.js - 将默认值设置为属性的新列, Mongoose 查询

node.js - Mongoose:如何将字段/值插入现有子文档中

javascript - 如何将请求参数传递回 Angular

c# - C# 中的线程和异步操作

c# - 使用 ExecuteNonQueryAsync 和报告进度

asynchronous - Heroku 可以同时处理多个连接(Sinatra on Thin)吗?

javascript - 如何使用sequelize获取用户角色?

javascript - 创建一个简单的 Node.js 静态服务器

node.js - 在 AWS 服务器上执行 npm run build 时出现问题 | JavaScript 堆内存不足

javascript - 异步 Mocha 测试中出现超时错误