我正在尝试从 api 创建 Node 种子脚本。该 API 在多个页面中显示,并有一个名为“numberOfPages”的属性。
在每一页上,我都会播种一个数据库。因此,我打算采用“numberOfPages”变量并使用 X 页面的适当 api 响应运行 for 循环。目前,在运行 .on 函数时,numberOfPages 显示为未定义。当我在下面的 if 语句中运行它时,它确实会显示。异步执行此操作的适当方法是什么?
"use strict"
var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var request = require('request');
let key = 'MAGICNUMBER';
let baseRequest = "http://apiurl?key=" + key;
mongoose.connect("mongodb://localhost:27017/myDatabase");
const db = mongoose.connection;
// mongo error
db.on('error', console.error.bind(console, 'connection error:'));`
function populateController(){
let numberOfPages;
request(apiRequest, function (error, response, body) {
if (!error && response.statusCode == 200) {
let apiResponse = JSON.parse(body);
numberOfPages = parseInt(apiResponse.numberOfPages);
}
}).on('end', () => {
console.log('ended');
console.log(numberOfPages);
}) })
最后祝大家节日快乐。
最佳答案
你的代码对我来说似乎很好,它应该可以工作。我已经在您的代码中添加了一些日志记录。
function populateController(){
let numberOfPages;
console.log('Starting');
request(apiRequest, function (error, response, body) {
if (!error && response.statusCode == 200) {
let apiResponse = JSON.parse(body);
numberOfPages = parseInt(apiResponse.numberOfPages);
console.log('Result', numberOfPages);
}
else {
console.error('Error in request', response.statusCode, err);
}
}).on('end', () => {
console.log('Ended', numberOfPages);
});
});
应该这么写,还是有些错误。
Starting
Result 42
Ended 42
顺便说一句,异步事情非常困惑。我建议使用异步等待。你需要习惯它们,并且不能完全离开 Node 回调。尽管如此,他们可能会让事情变得更干净。
加上相关帖子:Why doesn't request.on() work in Node.js -- 注意同步/异步执行顺序!一些日志记录可以帮助您了解执行顺序。
节日快乐!
关于javascript - 如何运行依赖于第一个 api 中设置的变量的 api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316729/