0

だから私はこのスクリプトを持っています:

var db = require('mongoskin').db('localhost:27017/titles', {safe:true});
var titles = db.collection('titles');

title = titles.findOne(function(err, result){
if (err) throw err;
return result.title;
});

console.log(title)

そして、コレクション内のこのBSONオブジェクト:

{"title": "Hello World", "postNumber": 0, "_id": ObjectId("509eeffbf8f11e8813000001")}

私の目標は、文字列「Hello World」を取得してコンソールに出力することですが、代わりに次のように取得します。

{ emitter: { _events: { open: [Object] }, _maxListeners: 50 },
  state: 1,
  options: undefined,
  skinDb:
   { emitter: { _events: [Object], _maxListeners: 100 },
     state: 1,
     _dbconn:
      { databaseName: 'titles',
    serverConfig: [Object],
    options: [Object],
    _applicationClosed: false,
    native_parser: true,
    bsonLib: [Object],
    bson: {},
    bson_deserializer: [Object],
    bson_serializer: [Object],
    _state: 'connecting',
    pkFactory: [Object],
    forceServerObjectId: false,
    safe: true,
    notReplied: {},
    isInitializing: true,
    auths: [],
    openCalled: true,
    commands: [],
    _callBackStore: [Object],
    logger: [Object],
    slaveOk: false,
    tag: 1352682584657,
    eventHandlers: [Object],
    serializeFunctions: false,
    raw: false,
    recordQueryStats: false,
    reaperEnabled: false,
    _lastReaperTimestamp: 1352682584657,
    retryMiliSeconds: 1000,
    numberOfRetries: 60,
    reaperInterval: 10000,
    reaperTimeout: 30000,
    readPreference: undefined },
 db: null,
 username: '',
 password: undefined,
 admin: { emitter: {}, state: 0, skinDb: [Circular], admin: null },
 _collections: { titles: [Circular] },
 bson_serializer:
  { BSON: [Object],
    Long: [Object],
    ObjectID: [Object],
    DBRef: [Function: DBRef],
    Code: [Function: Code],
    Timestamp: [Object],
    Binary: [Object],
    Double: [Function: Double],
    MaxKey: [Function: MaxKey],
    MinKey: [Function: MinKey],
    Symbol: [Function: Symbol] },
 ObjectID:
  { [Function: ObjectID]
    index: 0,
    createPk: [Function: createPk],
    createFromTime: [Function: createFromTime],
    createFromHexString: [Function: createFromHexString] } },
  ObjectID:
   { [Function: ObjectID]
 index: 0,
 createPk: [Function: createPk],
 createFromTime: [Function: createFromTime],
 createFromHexString: [Function: createFromHexString] },
  collectionName: 'titles',
  collection: null,
  internalHint: null,
  hint: [Getter/Setter] }

console.log()を関数内に配置すると、問題なく機能します。何らかの理由で文字列を返すことができません。

解決済み:

read = function(callback){
    titles.findOne(function(err, result){
        if (err) throw err;
        callback(result.title);
    });
};

read(function(title){
console.log(title);
});
4

1 に答える 1

0

javascriptコールバックを理解する必要があります。

1-findOneは、文字列の結果ではなく、dbオブジェクトを返します。私はmongoskindocoを読んだことはありませんが、それはdbコレクションか、console.logの出力に表示されるようなものになると思います。2-コールバックであなたはresult.titleを返します; あなたが期待するようにタイトルを返すことは決してありません。そのため、コールバックがどのように機能するかについて読んでおくことをお勧めします。

タイトルを印刷する正しい方法は、前述のように、console.logをコールバック関数内に配置することです。

于 2012-11-12T06:17:44.313 に答える