2017-02-27 3 views
0

このガベージ変数を作成するには、時間内にshipmentObjsの値として読み取られますか?私はconsole.logが "undefined"と読むことを知っていますが、関数の後に実行します。どうやって?私はいくつかの方法を試してみましたが、私は、これはあなたが彼db.scan機能でそれを配置する必要があり、上記のコードの罰金を動作するようにこの関数を次のコードの実行に間に合わせるには?

let garbage; 

    db.scan({TableName: 'shipments'}, (err,shipments) => { 
    if (err) console.error(err); 
    // We got our shipments 
    let shipmentObjs = shipments.Items; 
    // Bring out the "done: false" shipments to display 
    shipmentObjs = shipmentObjs.filter(obj => obj.done === false); 
    garbage = shipmentObjs; 
    }); 
}); 

// prints "undefined" . Must figure out a way to make it read shipmentObjs from the above code 
console.log(garbage); 
+1

このコードは完全に問題ありません。それが印刷されます。あなたの実際の質問は何ですか? –

+0

申し訳ありませんコードを実際のコードに変更しました。私はちょうどそれをより簡単にするために最初にダミーのものを作ったが、私はダミーコードが動作すると思う。これは今では本当のコードです。 – Chris

+1

'db.scan'は非同期であることを理解する必要があります。あなたの 'console.log'はスキャンが始まる前に起こりました。非同期コードは、約束またはコールバックを使用して処理できます。 –

答えて

0
console.log(garbage); 

を実現するための方法を見つけ出すように見えることはできません。

0

2つのもの。まず、db.scan()が非同期関数を呼び出す場合は、順序は関係ありません。 @Amreshが言ったように、これに約束またはコールバックを使用します。コードの第2の問題は、のdb.scan()funcの内部で起こっていることです。あなたが使用しているDBライブラリはわかりませんが、エラーが発生した場合はスキーマを受け取らない可能性が非常に高いです。したがって、あなたのコードはあなたのshipmentObjs.filter試しにクラッシュするでしょう。あなたはこの部分の世話をする必要があります。エラーを返すだけです。

関連する問題