2017-02-27 38 views
0

如何讓這個垃圾變量及時讀取爲shipmentObjs的值?我知道console.log會讀取「未定義」,但我希望它在函數後執行。怎麼樣?我嘗試了幾種方法,我似乎無法想出一個辦法來做到這一點如何讓這個函數及時執行下一個代碼?

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'發生在掃描開始之前。異步代碼可以通過使用promise或回調來處理。 –

回答

0
console.log(garbage); 

工作,你需要把它放在他db.scan功能上面的代碼罰款。

0

兩件事。首先,如果您調用異步函數 - 哪個db.scan()是,那麼順序無關緊要。正如@Amresh所說,使用承諾或回調這一點。你的代碼的第二個問題是發生了什麼裏面的 db.scan()函數。我不知道你使用的數據庫庫是什麼,但是如果你會得到一個錯誤,你很可能不會收到任何模式。因此,您的代碼會在您的shipmentObjs.filter嘗試中崩潰。你需要照顧這部分。只需返回你的錯誤。

相關問題