首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NodeJS中同步操作面临的问题

NodeJS中同步操作面临的问题
EN

Stack Overflow用户
提问于 2019-01-18 15:55:54
回答 5查看 70关注 0票数 0

下面的代码有2个文件,并且有client.js,它调用服务器文件,但没有获得同步输出。我尝试了promise,bluebird,async_await,但没有成功。预期输出是控制台中的字母表序列。

不要使用settimout。

理解文件。server.js :服务器文件正在使用仅包含路由内容的NodeAPI。

Client.js :此文件中包含已尝试的逻辑

您需要使用两个控制台,第一个控制台运行server.js,第二个控制台运行client.js,输出将在server.js控制台中打印。

代码语言:javascript
运行
复制
 Expecting output is 
    a
    b
    c
    d
    e

 /////////////////server.js/////////////////
    var express = require('express');
    var bodyParser = require('body-parser')
    var app = express();

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({
        extended: true
    }));

    app.post('/', function (req, res) {   
       console.log(req.body.test)
       res.status(200).send('ok');
    });

    var server = app.listen(3000, function () {
        console.log('ok');
    });

    //////////////client.js///////////////////


    //var Promise = require('bluebird');
    var request = require('request');
    console.log('server file called');
    var array_data = ['a', 'b', 'c', 'd', 'e'];


    // var promises = [];
    // for(let i = 0; i < array_data.length; i++) {
    //     var promise = request.post({url: 'http://localhost:3000',form : {key:array_data[i]}});
    // }

    // var page = 0;
    // var last_page = array_data.length;

    // (function loop() {
    //     if (page < last_page) {
    //         request.post({
    //             url: 'http://localhost:3000',
    //             form: 'test=' + array_data[page]
    //         }, function (error, response, body) {
    //             page++;
    //             loop();
    //         });
    //     }
    // }());


    // async function loopAsync() {
    //     for (let i = 0; i < array_data.length; i++) {
    //         await request.post({
    //             url: 'http://localhost:3000',
    //             form: 'test=' + array_data[i]
    //         });
    //     }
    // }
    // loopAsync();

    async function loopAsync() {
        var page = 0;
        var last_page = array_data.length;
        while (page < last_page) {
            await request.post({
                url: 'http://localhost:3000',
                form: 'test=' + array_data[page]
            });
            page++;
        }
    }
    loopAsync();


[enter image description here][1]


  [1]: https://i.stack.imgur.com/WVlut.png
EN

Stack Overflow用户

发布于 2019-01-18 18:21:51

正如我在研发中所做的那样,请求模块没有返回promise,因此需要使用request-promise库。

代码语言:javascript
运行
复制
let request = require('request');
    let rp = require('request-promise');
    var array_data = ['a', 'b', 'c', 'd', 'e'];    
    //with the use of request-promise library 
        async function loopAsync() {
            var page = 0;
            var last_page = array_data.length;
            while (page < last_page) {
                var options = {
                    method: 'POST',
                    uri: 'http://localhost:3000',
                    body: {
                        test: array_data[page]
                    },
                    json: true // Automatically stringifies the body to JSON
                };
                await rp(options);
                page++;
            }
        }
        loopAsync();
票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54249746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档