0

我一直在尝试用 Xray 收集的元数据填充数组,但没有成功。该函数由我服务器上的 API 路由调用,并从我的应用程序中获取链接。

我似乎在为承诺而苦苦挣扎,因为抓取元数据需要时间,而且我似乎无法让函数等到数据收集完毕后再继续。也许,我只是不明白 Xray 是如何工作的?或者也许是承诺?我已经尝试了我能想到的一切,这是最近的尝试(也是最简单的):

  function createCollection() {
    Promise.all(rawLinks.map(function(link) {
      linksArray.push(xray(link, 'title')(function(error, title) {
        console.log(title);
        return title;
      }))
    }))
    .then(linksArray => {
      console.log(linksArray);
    });
  }

到目前为止,这不是我尝试过的最强大或最精细的解决方案,但它是最新的解决方案。首先,控制台记录一个带有“未定义”的数组作为数据,然后记录各个标题。

我将非常感谢任何帮助或研究方向。就像我说的那样,我觉得我已经用尽了所有的想法,甚至不知道该往哪里看。

4

1 回答 1

0

想通了,这似乎在做伎俩!

  // format links into an array of objects
  var rawLinks = links.split(', ');
  var linksArray = [];

  createCollection();

  function createCollection() {
    rawLinks.map(function(link) {
      var fillMetaPromise = new Promise(
        function(resolve, reject) {
          var test = xray(link, 'title')(function(err, title) {
            var data = { title: title, link: link };
            resolve(data);
          });
        })
        .then(data => {
          processTitle(data.title, data.link);
        });
    });
  }

  function processTitle(title, link) {
    var object = {
      link: link,
      title: title
    };

    linksArray.push(object);
    console.log(linksArray);
  }
于 2016-09-09T01:59:25.973 回答