2016-12-18 94 views
0

我是JavaScript和NodeJS的新手,我需要快速解決這個問題。如何從另一個函數訪問在函數中創建的對象

 connection(getSQL2) 
    .then((table)=> { 
     table.forEach(row=> { 
      let obj = { 
       countryid: row.IdPais, 
       country: row.NombrePais 
      }; 
      data.push(obj); 
      }); 

     }); 

console.log(obj); 

當我嘗試顯示使用console.log的對象時,我得到未定義,這似乎很明顯。但是,如何讓它顯示上面創建的Object'obj'會是一個簡單的方法?

更新:只是爲了澄清,console.log這裏僅用作示例。我需要從外部訪問該對象,但是我可以。

提前致謝!

+0

將console.log調用移到您定義'obj'的回調中。 –

+0

我只是把外面的console.log弄清楚了,我需要從外面訪問這個對象。我需要從某個其他函數中獲取該對象的一些數據。就好像它是一個全局變量。 無論如何。 –

+0

試着安慰'data',它會被定義在 – anwerj

回答

0

這裏有兩件事。

1)您使用承諾並承諾異步解決。良好的經驗法則是以.then(...)結尾的任何代碼都將成爲承諾。這意味着它下面的代碼可以在承諾完成之前執行,並且如果它在承諾完成解決之前讀取這些值,則它們將被視爲undefined

2)您使用let關鍵字來定義你的變量,這意味着它只能在範圍定義:

row => { 
      let obj = { 
       countryid: row.IdPais, 
       country: row.NombrePais 
      }; 
      data.push(obj); 

      // Show the object where it is defined 
      console.log(obj); 
      } 
+0

在這種情況下,它可以工作,但console.log並不是我所需要的。 我需要訪問該對象,就好像它是來自另一個函數的全局變量。 無論如何。 –

+0

難道你沒有在你的'data'數組中訪問它嗎? – Mike

+0

只有在箭頭功能裏面。 –

0

你需要這樣做: -

async database() 
{ 

     try { 
      const table= await connection(getSQL2); 
      if (table!== null) 
      { 
      table.forEach(row=> { 
       let obj = { 
          countryid: row.IdPais, 
          country: row.NombrePais 
         }; 
      console.log('This will resolve the promise',obj); 
      } 
      else 
      { 
      //anything needed 
      } 
      } 
      catch (error) 
      { 
         // Error retrieving data 
      } 
} 

asyncawait是並行使用的關鍵字。 await關鍵字不會允許控件在獲取數據之前關閉。

+0

謝謝你的回答。我認爲這將是正確的道路。 但我發現了這一點: 異步數據庫(){ ^^^^^^^^ 語法錯誤:意外的標識 –

+0

我已經試過這種方法我的問題得到了解決和化解的承諾的正確方法。你在節點中使用這個函數嗎? – Codesingh

+0

我使用Node 7.1.0將一些SQL表導入到MongoDB集合中。 –

0

您可以創建一個global variable,並將該值分配給該函數中的該變量。

然後,您將可以訪問函數外部的變量obj

var temp;//declare a global variable here. 
connection(getSQL2) 
.then((table)=> { 
    table.forEach(row=> { 
     let obj = { 
      countryid: row.IdPais, 
      country: row.NombrePais 
     }; 
     data.push(obj); 
     temp = obj;//assign value to global variable here 
     }); 

    }); 

console.log(temp);//you can access the 'obj' using temp 

希望這可以幫助你。

+0

可悲的是沒有。仍未定義。 –

+0

對不起,你需要做'console.log(temp)',我會編輯我的答案。 –

相關問題