gpt4 book ai didi

javascript - Node.js 使变量等待分配直到回调函数完成

转载 作者:可可西里 更新时间:2023-11-01 10:05:48 28 4
gpt4 key购买 nike

我正在使用 Node.js、Express、MongoDB 和 Mongoose。我有一个函数可以在我的 MongoDB 数据库中获取文档的最大 ID 号并将其返回给程序。我已经开始模块化我的代码,并将该功能迁移到另一个模块。我已成功访问我的主模块中的函数,但它涉及异步数据库查询。当函数返回一个值时,我想将它分配给一个变量。不幸的是,当返回值赋给变量时,变量实际上被设置为未定义。我正在考虑使用事件发射器来表示查询已完成,但这也带来了两个问题:

1) 我认为您不能在返回语句后在程序中执行任何操作,而这是必需的。

2) 模块之间的事件发射器看起来非常挑剔。

请帮助我为变量分配正确的值。主要功能和模块的代码如下:

(主文件)app.js:

//requires and start up app
var express = require('express');
var mongoose = require('mongoose')
, dbURI = 'localhost/test';
var app = express();
var postmodel = require('./models/post').postmodel;

//configures app for general stuff needed such as bodyParser and static file directory
app.configure(function () {
app.use(express.bodyParser());
app.use(express.static(__dirname + '/static'));
});

//configures app for production, connects to mongoLab databse rather than localhost
app.configure('production', function () {
dbURI = 'mongodb://brad.ross.35:lockirlornie@ds037387.mongolab.com:37387/heroku_app6901832';
});

//tries to connect to database.
mongoose.connect(dbURI);
//once connection to database is open, then rest of app runs
mongoose.connection.on('open', function () {
var PostModel = new postmodel();
var Post = PostModel.setupPostSchema();
var largest_id = PostModel.findLargestID(Post);

(模块)post.js:

var mongoose = require('mongoose');

module.exports.postmodel = function () {
this.setupPostSchema = function () {
var postSchema = new mongoose.Schema({
title: String,
body: String,
id: Number,
date_created: String
});

var Post = mongoose.model('Post', postSchema);
return Post;
};

this.findLargestID = function (Post) {
Post.find(function (err, posts) {
if (err) {
console.log("error finding largest ID!");
} else {
var largest_id = 0;
for (var post in posts) {
if (posts[post].id >= largest_id) largest_id = posts[post].id;
}
console.log(largest_id);
return largest_id;
}
});
};
};

最佳答案

您需要让 findLargestID 接受一个回调参数,一旦 largest_id 可用,它就会调用该回调参数:

this.findLargestID = function (Post, callback) {
Post.find(function (err, posts) {
if (err) {
console.log("error finding largest ID!");
callback(err);
} else {
var largest_id = 0;
for (var post in posts) {
if (posts[post].id >= largest_id) largest_id = posts[post].id;
}
console.log(largest_id);
callback(null, largest_id);
}
});
};

关于javascript - Node.js 使变量等待分配直到回调函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com