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

问题描述 投票:1回答:1

下面的异步函数应该检查一个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()中的第二个参数传递什么。还是我一开始就错误地编写了第一个异步函数?

node.js asynchronous mongoose callback
1个回答
0
投票

请使用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对象表示异步操作的最终完成(或失败)及其结果值。


0
投票

请使用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.get("/", async function(req, res) {

  try {

    let result = await CheckUrl('google.com');
    console.log("result " , result)
    res.send(result)
  }
  catch (error) {
    console.log("in catch error " , error)
    res.send(error)
  }
});

app.listen(3000)
© www.soinside.com 2019 - 2024. All rights reserved.