在mongoose find方法之外的访问变量 - 节点js

时间:2017-02-02 17:41:06

标签: javascript node.js mongoose

在我的节点js程序中,我查看我的mongoose数据库,找到并返回该集合中的值 - 只有一个值。

var myValueX;
myCollection.find(function(err, post) {
        if (err) {
            console.log('Error ' + err)
        } else {
            myValueX = post[0].valuex;
        }
    });

console.log('Have access here' + myValueX);

现在,我希望能够在此find方法之外使用myValueX。我怎么能这样做?

当我尝试上面的console.log时,我得到了未定义 - 这是否可以实现

1 个答案:

答案 0 :(得分:0)

要在myValueX的回调中分配find之后访问myValueX,你有两个选项,第一个(自然地)在回调本身内部,或者在回调调用的函数内部您发送function findPromise(collection) { return new Promise((resovle, reject) => { collection.find((err, post) => { if (err) return reject(err) // if all you want from post is valuex // otherwise you can send the whole post resolve(post[0].valuex) }) }) } findPromise(collection) .then((valueX) => { // you can access valuex here // and manipulate it anyway you want // after it's been sent from the `findPromise` console.log("valueX: ", valueX) }) .catch((err) => { console.log("An error occurred. Error: ", err) }) 作为参数。

我认为更好的解决方案是使用承诺。

一个简单的承诺使用解决方案如下:

procedure ScreenShotWindow;
var
  c: TCanvas;
  r, t: TRect;
  h: THandle;
  Bild: TBitMap;
begin
  c := TCanvas.Create;
  h := FindWindow(nil, 'Untitled - Notepad');
  c.Handle := GetWindowDC(h);
  GetWindowRect(h, t);
  try
    r := Rect(0, 0, t.Right - t.Left, t.Bottom - t.Top);
    Bild := TBitMap.Create;
    try
      Bild.Width  := t.Right - t.Left;
      Bild.Height := t.Bottom - t.Top;
      Bild.Canvas.CopyRect(r, c, t);
      Bild.SaveToFile('test'+ RandomPassword(10)+'.bmp');
    finally
      Bild.Free;
    end;
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;