2017-03-11 4 views
0

ローカルDBを電子メールで検索しようとしていますが、別のjsファイルからインポートを介してその機能を参照しようとすると、 。私はこの問題についてStackについて少し調べました。コールバックと呼ばれるものについて聞いたことは、これを実装する必要があるのでしょうか?もしそうなら、私に例を教えてもらえますか?インポートされたカスタムノードノードモジュールを使用すると未定義の結果

ありがとうございます!ここで

は(ファイルdb.js)エクスポートされた私のコードです:ここでは

var neo4j = require('neo4j-driver').v1; 
var driver = neo4j.driver("bolt://localhost:7687", neo4j.auth.basic("neo4j", "neo4j")); 
var session = driver.session(); 
exports.findEmail = (email) => { 
    // console.log('hi'); 
    session 
     .run("MATCH (a:Person) WHERE a.email = {email} RETURN a.name AS name, a.email AS email, a.location AS location", { 
      email: email 
     }) 
     .then((result) => { 
      let result_string = ''; 

      result.records.forEach((record) => { 
       console.log(record._fields); 
       result_string += record._fields + ' '; 

      }); 
      return result_string; 
     }) 
     .catch((e) => { 
      return ('error : ' + JSON.stringify(e)); 
     }) 
} 

は、輸出を呼び出す私のコードです:(test.js)

var tester = require('./db.js'); 
let temp = tester.findEmail("[email protected]"); 
console.log(temp); 
+0

もっと正確に入力してください。潜在的に*間違っているかもしれないいくつかの部分を見ることができます。 '結果'は*未定義*ですか? –

答えて

0

事はそのJSあります非同期であり、同期コードとして使用しています。

あなたは動作するはずです、この1を試すことができます:

var neo4j = require('neo4j-driver').v1; 
    var driver = neo4j.driver("bolt://localhost:7687", neo4j.auth.basic("neo4j", "neo4j")); 
    var session = driver.session(); 
    const findEmail = (email, callback) => { 
    console.log('hi :', email); 
    session 
    .run("MATCH (a:Person) WHERE a.email = {email} RETURN a.name AS name, a.email AS email, a.location AS location", { 
     email: email 
    }) 
    .then((result) => { 
     let result_string = ''; 

     result.records.forEach((record) => { 
      console.log(record._fields); 
      result_string += record._fields + ' '; 

     }); 
     return callback(null, result_string); 
    }) 
    .catch((e) => { 
     return callback('error : ' + JSON.stringify(e))); 
    }) 
    } 

module.exports = { 
    findEmail 
}; 

次にtest.jsに:

var tester = require('./db'); 
tester.findEmail("[email protected]", (err, temp) => { 
if (err) return console.error(err); 
console.log(temp); 
}); 

この背後にある考え方は、DBファイル内のすべてのフローが非同期であるということです。

結果をキャッチするには、関数callbackを渡す必要があります。これは、非同期フローが完了したときにトリガーされます。

+0

入力していただきありがとうございます。私はこれがうまく動作しないと思います。コンソールログがどこに出力されているかを調べるために、test.jsの 'test'のconsole.logに追加しました。これは未定義のtest.jsに印刷されますが、その直後に何らかの形でユーザー情報が表示されます。ここで私の出力は次のとおりです:hi:[email protected](NEWLINE) テストで未定義(NEWLINE) ['Billy Bob'、 '[email protected]'、 '928843.343432'] –

+0

私は答えを修正します今。はい、あなたはコールバックを渡す必要があります、私はちょうどあなたの未定義のexporetedモジュールにsolutyionを追加し、コールバックを追加します:すぐに新しいコードをチェックしてください(私はそれが修正された後投稿します)。 JSのコードは非同期です。 – BlackStork

+0

を編集してください。 – BlackStork

関連する問題