如何在 node 中创建"请求"模块.js以同步方式加载东西?我所看到的最好的建议是以某种方式使用回调函数,使函数在完成之前不返回自身.我正在try 在代码中内联使用"request"函数(需要根据无法放入回调中的数据来处理事情).

那么,我如何使用"request"模块的回调来阻止它在加载完资源之前返回自身呢?

我要做的是运行一个循环,从API下载两个值,然后根据这些值进行计算.虽然计算可以在回调中完成...循环将在没有执行下一个操作所需的值的情况下前进.(因此,在数据准备就绪之前阻止循环前进可以解决问题)

    /* loop */ {
         /* URL Generation */


    request( {url: base + u_ext}, function( err, res, body ) {
        var split1 = body.split("\n");
        var split2 = split1[1].split(", ");
        ucomp = split2[1];
    });

    request( {url: base + v_ext}, function( err, res, body ) {
        var split1 = body.split("\n");
        var split2 = split1[1].split(", ");
        vcomp = split2[1];
    });

    /* math which needs to be after functions get variables and before loop advances */
    }

推荐答案

2018年,您可以在Node中使用asyncawait编程"常规"样式.js.

下面是一个例子,它将请求回调包装在一个promise 中,然后使用await来获得解析值.

const request = require('request');

// wrap a request in an promise
function downloadPage(url) {
    return new Promise((resolve, reject) => {
        request(url, (error, response, body) => {
            if (error) reject(error);
            if (response.statusCode != 200) {
                reject('Invalid status code <' + response.statusCode + '>');
            }
            resolve(body);
        });
    });
}

// now to program the "usual" way
// all you need to do is use async functions and await
// for functions returning promises
async function myBackEndLogic() {
    try {
        const html = await downloadPage('https://microsoft.com')
        console.log('SHOULD WORK:');
        console.log(html);

        // try downloading an invalid url
        await downloadPage('http://      .com')
    } catch (error) {
        console.error('ERROR:');
        console.error(error);
    }
}

// run your async function
myBackEndLogic();

Node.js相关问答推荐

为高流量网站优化Node.js实时通知服务

Express无法发布

JsonwebToken过期后如何注销和清除cookie?

当 Got 包因错误 JSON 崩溃时如何获取响应文本?

如何从mongoose 对象内嵌套的数组中提取数组元素?

如何设置 Puppeteer Select 器的唯一性?

如何调用同名的两个函数?

WSL2 上需要脚本运行的 NPM 包的权限被拒绝

后端位于 Docker 容器中时的 SvelteKit SSR fetch()

tsc:当我上传 React+next js 和 node 项目时,在 heroku 找不到

在 gatsby 中安装软件包时不推荐使用的错误

使用中的端口代码:'EADDRINUSE',即使在 kill 命令之后

node.js 中 pdfkit-tables 中的垂直线

如何从 Redis 保存和检索会话

无法获取 CSS 文件

AngularJS +sails.js

npm publish 导致'错误:EPERM:不允许操作,取消链接...',errno -4048

__dirname 未在 Node 14 版本中定义

yarn 和 npm 的主要区别是什么?

npm install packagename --save-dev 不更新 package.json