Javascript 在回调中调用时,Insert未被调用,这是为什么?

Javascript 在回调中调用时,Insert未被调用,这是为什么?,javascript,callback,meteor,Javascript,Callback,Meteor,当我将insert移到s3.putObject之后时,这段代码可以工作,但是当我将它放在回调中时,它似乎可以工作,但是没有向数据库添加任何内容,也没有在网页上更新任何内容 Meteor.methods({ createPost: function(options){ // check(options,{ var id = Random.id(); var data = { Key: id, Body: 'H

当我将insert移到s3.putObject之后时,这段代码可以工作,但是当我将它放在回调中时,它似乎可以工作,但是没有向数据库添加任何内容,也没有在网页上更新任何内容

 Meteor.methods({
        createPost: function(options){
            // check(options,{
            var id = Random.id();
            var data = { Key: id, Body: 'Hello!'};
            if(Meteor.isServer){
            s3.putObject(data, function(err, data) {
                if (err) {
                    console.log("Error uploading data: ", err);
                } else {
                    console.log("Successfully uploaded data to s3.");
                    if(options.title.length > 200){
                        throw new Meteor.Error(413,"Title too long");
                    }
                    //if(!this.userId){
                        //throw new Meteor.Error(403, "You must be logged in");
                    //}
                    console.log("test")
                    var id = options._id || Random.id();
                    console.log(Posts.findOne());
                    Posts.insert({
                        _id: id,
                        owner: "test",
                        lat: options.lat,
                        lon: options.lon,
                        title: options.title,
                        public: !!options.public,
                        upvotes: 1,
                        downvotes: 0,
                        rank: 0 
                    });
                }
            });
        }
            // });


        }

    });

我需要绑定到我的环境,因为一切都必须在光纤中执行

Meteor.methods({
    createPost: function(options){
        // check(options,{

        var id = Random.id();
        var data = { Key: id, Body: 'Hello!'};
        if(Meteor.isServer){
        s3.putObject(data, Meteor.bindEnvironment(function(err, data) {
            if (err) {
                console.log("Error uploading data: ", err);
            } else {
                console.log("Successfully uploaded data to s3.");
                if(options.title.length > 200){
                    throw new Meteor.Error(413,"Title too long");
                }
                //if(!this.userId){
                    //throw new Meteor.Error(403, "You must be logged in");
                //}
                console.log("test")
                var id = options._id || Random.id();
                console.log(Posts);
                 var ret = Posts.insert({
                    _id: id,
                    owner: "test",
                    lat: options.lat,
                    lon: options.lon,
                    title: options.title,
                    public: !!options.public,
                    upvotes: 1,
                    downvotes: 0,
                    rank: 0 
                }, function(error, results){
                    console.log(error)
                });
                 console.log("test2");

            }
        },function () { console.log('Failed to bind environment'); }));

    }

        // });



}
});

我假设
Posts.insert
是异步的。它应该有一个回调参数。在该回调中,您可以检查帖子是否已成功添加,然后从
createPost
返回。在这种情况下,它是同步的。createPost是同步的吗?我相信createPost也是同步的。