2017-12-04 4 views
1

Ich würde gerne wissen, ob es eine Möglichkeit gibt zu überprüfen, ob eine URL synchron existiert. Tatsächlich lade ich Dateien herunter, also muss ich sicherstellen, dass diese URLs existieren, bevor ich versuche, sie herunterzuladen. Hier ist das Paket, das ich verwende, um zu überprüfen, ob diese URLs gültig sind https://github.com/boblauer/url-existsWie überprüfe ich, ob die URL synchron in NodeJs existiert?

+1

Remote-Anforderungen sind normalerweise nicht synchron – charlietfl

+1

Sie können ca mach es nicht asynchron? – epascarello

+0

Rufen Sie einfach die URL und wenn es eine 404 zurückgibt, die URL existiert nicht ... aber es wird immer async sein, da Server-Prozesse beteiligt sind und Sie nicht im Voraus wissen, wie lange das dauern wird. Oder sind die Dateien auf Ihrem eigenen Server? Dann könnten Sie eine Art Index erstellen, der alle verfügbaren Dateien enthält. – Kokodoko

Antwort

3

Kurz gesagt, können Sie nicht.

Sie können nicht erzwingen, dass eine asynchrone Anforderung synchron ist.

Sie haben ein paar verschiedene syntaktische Ansätze (Promises, async/await, Veranstaltungen über Node.js http, Rückrufe, etc.), aber es ist alles unten in irgendeiner Art und Weise zu sein async kochen geht.

Die async/await Muster wird aussehen am synchronsten, aber es wird immer noch async.

Das von Ihnen verwendete Paket verwendet das Callback-Muster, daher müssen Sie Ihren anderen Code so anpassen, dass er asynchron ist. Sie können diese Ansätze kombinieren und anpassen.

Meine persönliche Präferenz besteht darin, nicht-Promise-Muster in ein Promise-Muster zu verpacken und dann die ganze Syntax async/await zu verwenden. Auch dies sieht synchron aus, aber bedenke es nicht und behandle es dementsprechend.

Sie können Callback-Syntax als Versprechen wie diese wickeln:

const urlExistsPromise = url => new Promise((resolve, reject) => 
    urlExists(url, (err, exists) => err ? reject(err) : resolve(exists)); 

Und Sie können es wie folgt verwenden:

urlExistsPromise(url).then(exists => console.log(exists)); 

oder als await (innerhalb einer Funktion markiert async):

const exists = await urlExistsPromise(url); 
+0

Tks @ Samanin. Ich werde es versuchen und zu dir zurückkommen. Aber ich denke, deine Antwort sollte den Job machen. –

+0

Hallo. Tks ein lo für das Helfen –

Verwandte Themen