nodejs等待函数执行

时间:2016-08-16 10:22:32

标签: javascript node.js callback

我如何等待函数返回。在继续我的代码之前,有没有办法等待函数完成执行。我想在继续之前等待createThumbnail函数返回缓冲区。谢谢。

 createThumbnail: function(imagepath){
    Jimp.read(imagepath).then(function (lenna) {
        lenna.resize(256, 256)            // resize
            .quality(60)                 // set JPEG quality
            //  .greyscale()                 // why on earth would i need black and white
            .getBuffer(Jimp.MIME_JPEG,function(err, buffer, callback){ // I have other Options like png etc.

                return buffer;

            })
    }).catch(function (err) {
        console.error(err);
    });

},

然后在另一个文件中我调用此函数

var thum_image = functions_api.createThumbnail(Imagepath);
console.log(thum_image); // its null

3 个答案:

答案 0 :(得分:1)

您可以使用回调。

回调是一旦完成某些事情就会执行的功能,在你的情况下最终会加载图像。

不是只带一个参数,而是在加载图像后调用另一个函数:

createThumbnail: function(imagepath, callback){
    Jimp.read(imagepath).then(function (lenna) {
        lenna.resize(256, 256)            // resize
            .quality(60)                 // set JPEG quality
            //  .greyscale()                 // why on earth would i need black and white
            .getBuffer(Jimp.MIME_JPEG,function(err, buffer, callback){ // I have other Options like png etc.
                callback(buffer);
                return buffer;

            })
    }).catch(function (err) {
        console.error(err);
    });

},

然后你可以调用像

这样的函数
var thum_image = functions_api.createThumbnail(Imagepath, function (image) {
   console.log("Loaded!", image); 
});

答案 1 :(得分:1)

您已将<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script> promise包一起使用。基于此,您也可以在代码中使用promise

Jimp

答案 2 :(得分:-1)

你需要使用Promises。查看包qasync

在q中,您可以执行以下操作:

var q = require('q')
createThumbnail: function loadImage(imagepath) {
    var deferred = q.defer();
    Jimp.read(imagepath).then(function (lenna) {
        lenna.resize(256, 256)            // resize
            .quality(60)                 // set JPEG quality
            //  .greyscale()                 // why on earth would i need black and white
            .getBuffer(Jimp.MIME_JPEG,function(err, buffer, callback){ // I have other Options like png etc.
                deferred.resolve(buffer)
            })
    }).catch(function (err) {
        deferred.reject(err)
    });
}

//WHEREVER YOU WANT THE BUFFER
createThumbnail(imagepath).then(function(buffer) {
    console.log(buffer)
}).catch(function(error) {
    console.log(error)
}).done();