【发布时间】:2019-06-12 11:15:12
【问题描述】:
下面的代码有 2 个文件,并且有 client.js 调用服务器文件但没有得到同步输出。 我尝试了promise、bluebird、async_await,但没有成功。 预期输出是控制台中的字母序列。
不要使用 settimout。
了解文件。 server.js : 服务器文件有 NodeAPI,它的内容只路由。
Client.js : 尝试的逻辑在这个文件中
您需要使用两个控制台,首先运行 server.js,第二个控制台需要运行 client.js,输出将在 server.js 控制台中打印。
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
【问题讨论】:
-
您可以将 await 与 promise 一起使用,因此请使用 request-promise npmjs.com/package/request-promise#request-promise
-
嗨@Ariz,我已经尝试过承诺请求但没有成功。
-
@Ariz 是对的,您只能将 await 与返回承诺的函数一起使用,请求本身不会这样做。你能分享一下你在 request-promise 中使用的代码吗?
-
我要做的第一件事是使用 NPM 调试断点来确保请求按预期顺序分派,这将排除客户端的任何问题。
标签: node.js promise async-await bluebird