How can I make this call to request in nodejs synchronous?

后端 未结 6 1720
旧时难觅i
旧时难觅i 2020-11-30 05:07

I have a function in my nodejs application called get_source_at. It takes a uri as an argument and its purpose is to return the source code from that uri. My problem is that

6条回答
  •  粉色の甜心
    2020-11-30 05:41

    Having a simple blocking function is a great boon for interactive development! The sync function (defined below) can synchronize any promise, cutting down dramatically on the amount of syntax needed to play with an API and learn it. For example, here's how to use it with the puppeteer library for headless Chrome:

    var browser = sync(puppeteer.connect({ browserWSEndpoint: "ws://some-endpoint"}));
    var pages = sync(browser.pages())
    pages.length
    1
    var page = pages[0]
    sync(page.goto('https://duckduckgo.com', {waitUntil: 'networkidle2'}))
    sync(page.pdf({path: 'webpage.pdf', format: 'A4'}))
    

    The best part is, each one of these lines can be tweaked until it does what you want, without having to re-run or re-type all of the previous lines each time you want to test it. This works because you have direct access to the browser and pages variables from the top-level.

    Here's how it works:

    const deasync = require("deasync");
    const sync = deasync((promise, callback) => promise.then(result) => callback(null, result)));
    

    It uses the deasync package mentioned in other answers. deasync creates a partial application to the anonymous function, which adds callback as the last argument, and blocks until callback has been called. callback receives the error condition as its first argument (if any), and the result as its second (if any).

提交回复
热议问题