node.js中的返回值为null,带有mongoose

时间:2013-06-07 05:02:27

标签: node.js mongoose

我正在使用带有mongoose的node.js。我面临的问题是我正在打印newModifier1,但在该函数之外,该值为空。

这是我的代码:

// Find userSchema

newModifier1 = "";

exports.findModifier = function(modifierName){
  modifierModel.find({'name' : modifierName},function(err,result){
    if(err){
      console.log("Error : "+err);
      throw err;
    }
    else{
      newModifier1 = result;
    //  console.log("Modifier is searched successfully : "+newModifier1);
    }
    console.log("Modifier is searched successfully1 : "+newModifier1);
  });
  // newModifier1=temp;
  return newModifier1; // it takes newModifier1 = "" value here
}

任何想法可能是什么问题?

2 个答案:

答案 0 :(得分:1)

这就是发生的事情:

// this is "global" an would be weirdly overwritten
// if function is called multiple times before finishing
newModifier1 = "";

exports.findModifier = function(modifierName){

    // TIMESTAMP: 0

    modifierModel.find({'name' : modifierName},function(err,result){

        // TIMESTAMP: 2

        if(err){
            console.log("Error : "+err);
            throw err;
        }
        else{
            newModifier1 = result;
        //  console.log("Modifier is searched successfully : "+newModifier1);
        }
        console.log("Modifier is searched successfully1 : "+newModifier1);
    });

    // TIMESTAMP: 1

    return newModifier1; // it takes newModifier1 = "" value here
}

当发生了什么时,我添加了一些注意事项。正如您所看到的,并且由于node.js的异步特性,您在从数据库返回结果之前返回该值。

您需要熟悉异步流和回调函数。

将回调函数传递给findModifier并等待数据库返回结果。

答案 1 :(得分:0)

modifierModel.find以异步方式运行,并且在执行find方法的回调之前可能会返回findModifier方法。虽然你看到它被打印出来但从方法返回的是无论如何都是空字符串。您可以使用async等库。