Node.js - Как вы вызываете асин c функцию с обратным вызовом? - PullRequest
1 голос
/ 20 февраля 2020

Приведенная ниже функция asyn c должна проверять, является ли URL-адрес файлом git 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
  }
});

Я не уверен, что передать в качестве второго аргумента в CheckUrl () в этом операторе if. Или, может быть, я неправильно написал первую функцию asyn c для начала?

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Как упоминал DeepKakkar, это было то, что я искал:

app.post("/api/shorturl/new", async (req, res) => {
  try {
    let result = await CheckUrl(req.body.url);
    res.send(result)
  }
  catch (error) {
    return new Error('Could not receive post');
  }
});
0 голосов
/ 20 февраля 2020

Пожалуйста, используйте asyn c 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 представляет возможное завершение (или сбой) асинхронной операции и ее результирующее значение.

...