node.js:如何使异步数据全局可用

时间:2017-08-11 00:20:10

标签: node.js asynchronous amazon-dynamodb

我是Node.js的新手。我正在使用DynamoDB本地从数据库中读取数据,如下所示。

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 个答案:

答案 0 :(得分:2)

对于你的情况,我建议使用promises。这是你的代码。

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 :(得分: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);
            })
        }
    })
};  

我希望我有所帮助。