Javascript 等待处理结束,然后将其保存到数据库[解决]

Javascript 等待处理结束,然后将其保存到数据库[解决],javascript,express,es6-promise,Javascript,Express,Es6 Promise,我使用express JS和Node JS构建REST API 我想用cheerio构建一个json对象,然后将其添加到我的mongoDB数据库中 const Post = require('../models/Post'); const exportDataCtrl = require('./exportData'); exports.createDataWithUrl = (req, res, next) => { let url = req.params.url; con

我使用express JS和Node JS构建REST API

我想用cheerio构建一个json对象,然后将其添加到我的mongoDB数据库中

const Post = require('../models/Post');
const exportDataCtrl = require('./exportData');

exports.createDataWithUrl = (req, res, next) => {
  let url = req.params.url;

  const dataScrape = exportDataCtrl.scrapeData(url);

  const post = new Post({
    ...dataScrape
  })

  post.save()
    .then(post => res.status(201).json({ message:'success !'}))
    .catch(error => res.status(400).json({ error:error })) 
}
根据,承诺是一个实用的解决方案,但我仍然难以用JavaScript创建承诺

我编写了此测试代码

我用这个函数创建了一个控制器,它将用cherrio分析url

url参数是从my API的post路由传输的

exports.scrapeData = (url) => {
   console.log('Scraping data', url);
   return url;
}
另一个控制器的此功能检索数据并将其保存在数据库中

const Post = require('../models/Post');
const exportDataCtrl = require('./exportData');

exports.createDataWithUrl = (req, res, next) => {
  let url = req.params.url;

  const dataScrape = exportDataCtrl.scrapeData(url);

  const post = new Post({
    ...dataScrape
  })

  post.save()
    .then(post => res.status(201).json({ message:'success !'}))
    .catch(error => res.status(400).json({ error:error })) 
}
编辑:添加Post.js代码,Post是一个mongoDB数据库模型,是我用来执行测试的

const mongoose = require('mongoose');

const postSchema = mongoose.Schema({
  title: { type:String, required:true },
  description: { type:String, required:true },
  contact_name: { type:String, required:true }
})

module.exports = mongoose.model('Post', postSchema);
我试图用scrapeData函数和mongoDB的save函数创建一个承诺,但我仍然得到该函数返回一个未定义的结果

我想我不太明白这些承诺,错误一定很明显


提前感谢您的帮助和回答。

鉴于需要一些时间来处理url中的数据,scrapeData似乎是一个promise函数。在这种情况下,该函数应该能够执行,并且假设它在解析该函数后将返回数据,您可以从以下公式推导出实际代码:

exports.createDataWithUrl=(请求、恢复、下一步)=>{
设url=req.params.url;
//假设数据返回一个承诺
exportDataCtrl.scrapeData(url)。然后((数据)=>{
const post=new post({data});
邮递
.save()
.then((post)=>res.status(201.json({message:“success!”}))
.catch((error)=>res.status(400).json({error:error}));
});
};
编辑:下面是scrapeData函数作为承诺的样子(cheerio是根据注释添加的)


请分享
Post.js
中实现保存功能的代码。我更新了我的帖子,我还修复了一个语法错误是的,我认为考虑到这一点,cherrio脚本可能需要一些时间,所以我想进行抓取,然后等待恢复数据。但是如何才能将promise添加到scrapData函数中呢?我特别用cheerio更新了示例代码,可以从中派生出来,也可以阅读promises。