2017-08-11 46 views
1

我是Node.js的新手。我正在使用DynamoDB本地從數據庫中讀取數據,如下所示。node.js:如何使異步數據全局可用

function readFromTable (params){ 

    docClient.get(params, function(err, data) { 
     if (err) { 
      console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2)); 

     } else { 
      console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); 
      result = JSON.stringify(data, null, 2); 
      console.log ("got result"); 
      console.log (result); 
     } 
    }); 

我知道這是一個異步函數,不能返回。異步數據僅在函數成功事件中可用。

但我需要使result數據在函數外部可用,因爲我需要將它返回給html。我怎麼做?

回答

2

對於您的情況,我會建議使用承諾。這是你的代碼。

function readFromTable(params) { 
    return new Promise((resolve, reject) => { 
    docClient.get(params, function(err, data) { 
     if (err) { 
      console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2)); 
      return reject(err); 
     } else { 
      console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); 
      result = JSON.stringify(data, null, 2); 
      console.log ("got result"); 
      return resolve(result); 
     } 
    }); 
    }); 
} 

readFromTable(yourParams).then((results) => { 
    console.log('You got your results'); 
}); 
1

答案是回調或承諾。每個變量都可以在函數'docClient'內部訪問。考慮回調中的一個簡單例子:

function readFromTable (params) { 

    function anotherFunction(callback) { 
     //do something 
     var someVariable = ''; 
     callback(someVariable); 
    } 

    docClient.get(params, function (err, data) { 
     if (err) { 
      console.log(err); 
     } else { 
      anotherFunction(function (someVariable) { 
       console.log(someVariable); 
       // you can access data here; 
       console.log(data); 
      }) 
     } 
    }) 
}; 

我希望我能幫上忙。