2014-03-31 57 views
0

首先道歉爲我可憐的英語。與異步sequelize並找到方法

我無法訪問查找方法之外更新的vehicle.vsr.selectedvalues。

步驟i隨後

1)我有一個車輛陣列及相關聯的vsrdetails。 2)我想在現有的車輛JSON中增加一個元素(contractor_name)。 3)爲此我正在形成新的數組併發送到響應。

威脅是我無法訪問查找方法之外更新的vehicle.vsr細節。

 async.forEach(vehicles, function(vehicle, callback){ 
    newvehicles.push(vehicle.selectedValues) 
    Contractor.find({ 'where': { 'id': (vehicle.vsr.contractor_id).toString().trim() } }).success(function(contractor){ 
     console.log(vehicle.vsr.contractor_id +"======"+ contractor.name + "========"+ vehicle.vsr.project_id) 
     var vsrnew = Array() 
     console.log("***************************************************") 
     console.log(newvehicles) 
     vehicle.vsr.selectedValues["contractor_name"] = contractor.name 
     vsrnew.push(vehicle.vsr.selectedValues) 
     newvehicles["vsr"] = vehicle.vsr.selectedValues 
     }) 

    callback() 
    },function(){ 
     return res.json({ "total": total, "start": start, "limit": limit, "items": newvehicles }) 
    }) 

感謝您的耐心等待。

回答

1

我看到的一些東西:

你的分號在哪裏? :)

您的行newvehicles["vsr"] = vehicle.vsr.selectedValues;每次分配相同的值。我看到你使用.push()來添加新的項目到該陣列(我認爲這是你的意圖從JSON響應屬性名稱「項目」),你應該在該行做同樣的事情。或者分配給一個新的子元素。

可變vehicle只是find()方法的一部分由於async.forEach呼叫 - 將每個項目的功能中有一個名爲vehicle,可以在該功能範圍訪問的變量。

如果您想在其外部使用它,請勿在.find()中創建新陣列(var vsrnew = Array())。

請高興評論更多,更新您的問題,具體細節。

+0

衷心感謝您的更新,忽略分號。得到它 –

+0

嗨@clay,在上面的問題。我正在獲取記錄並在同一對象中添加名爲contractor_name的新元素並將其推入新數組。在這裏,每一件事情都很好。現在我關心的是,新陣列並不是作爲車輛列表形成的,bcoz是異步過程。如何避免這種情況,車輛檢索爲排序順序後,我想提取承包商。 –

+0

你需要確保你所推入的對象/數組是在'async.each'調用之上定義的。否則,範圍在'each'函數內,然後在示波器死亡時丟失。一旦你擁有了所有你想要的元素,你可能需要在'async.each'的末尾進行排序。 – clay