mongoosefindOne后lwip.open不工作

所以我有mongoose,m and和lwip(他们是从顶部的要求)。

var express = require('express'); var router = express.Router(); var mongoose = require('mongoose'); var jwt = require('jsonwebtoken'); var Users = require('../models/users.js'); var multer = require('multer'); var mime = require('mime'); var lwip = require('lwip'); 

如果我评论Users.findOne部分,图像被裁剪,因为我想它被裁剪。 但是,如果我取消注释它的lwip部分停止工作,虽然没有错误抛出。 它只是不inputlwip.open()

 router.post('/image', upload.single('file'), function (req, res) { //This part works always. Users.findOne({userid: req.body.userid}, function (err, user) { var imgpath = req.file.path.split("public\\")[1]; user.user_photos.push(imgpath); user.save(function (err) { if (err) console.log('error'); else console.log('success'); }); }); //If I remove the top part, this part will work too. lwip.open(req.file.path, function(err, image){ image.batch() .crop(200,200) .writeFile(req.file.path, function(err) { if (err) console.log('error'); else console.log('success'); }); }); }); 

你可能也需要我的configuration器,所以这里是:

 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './public/uploads/') }, filename: function (req, file, cb) { var extension; if (mime.extension(file.mimetype) == "jpeg") { extension = "jpg"; } else { extension = mime.extension(file.mimetype); } cb(null, file.fieldname + '-' + Date.now() + '.' + extension); } }); 

你能帮我弄清楚问题在这里吗?

他们都是asynchronousfunction。 如何保证在函数退出之前都完成了? 我推荐使用蓝鸟这样的承诺库。 有了它,您可以同时运行多个asynchronous函数,并指定它们返回时发生的情况。

不要忘记“promisify”任何你想作为承诺使用的库。 你的代码看起来像这样:

我的路线('blah',function(){return Promise.all([myfunct1,myfunct2],(retval)=> {return {f1val:retval [1],f2val:retval [2]}})

我知道一些屁股会出现,并拿我的答案,并写出代码给你,所以你所要做的就是复制粘贴它,但我真的希望你花时间学习为什么,以及如何工作如果你不知道。