最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

在map中调用异步函数的最佳方法?

IT培训 admin 10浏览 0评论

在map中调用异步函数的最佳方法?

我正在数组上进行映射,对于新对象的返回值之一,我需要进行异步调用。

var firebaseData = teachers.map(function(teacher) {
  return {
    name: teacher.title,
    description: teacher.body_html,
    image: urlToBase64(teacher.summary_html.match(/src="(.*?)"/)[1]),
    city: metafieldTeacherData[teacher.id].city,
    country: metafieldTeacherData[teacher.id].country,
    state: metafieldTeacherData[teacher.id].state,
    studioName: metafieldTeacherData[teacher.id].studioName,
    studioURL: metafieldTeacherData[teacher.id].studioURL
  }
});

该功能的实现将类似于

function urlToBase64(url) {
  request.get(url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      return "data:" + response.headers["content-type"] + ";base64," + new Buffer(body).toString('base64');
    }
  });
}

我不清楚实现此目标的最佳方法是什么……承诺?嵌套的回调?在ES6或ES7中使用某些东西,然后与Babel进行转换?

目前实现此目的的最佳方法是什么?

谢谢!

回答如下:

一种方法是Promise.all (ES6)。

此答案将在Node 4.0+中起作用。较旧的版本将需要Promise polyfill或库。我还使用了ES6箭头功能,可以将其替换为节点<4的常规Promise.all

[此技术以Promise手动包装function。您也可以使用request.get之类的库。

request-promise

在map中调用异步函数的最佳方法?

我正在数组上进行映射,对于新对象的返回值之一,我需要进行异步调用。

var firebaseData = teachers.map(function(teacher) {
  return {
    name: teacher.title,
    description: teacher.body_html,
    image: urlToBase64(teacher.summary_html.match(/src="(.*?)"/)[1]),
    city: metafieldTeacherData[teacher.id].city,
    country: metafieldTeacherData[teacher.id].country,
    state: metafieldTeacherData[teacher.id].state,
    studioName: metafieldTeacherData[teacher.id].studioName,
    studioURL: metafieldTeacherData[teacher.id].studioURL
  }
});

该功能的实现将类似于

function urlToBase64(url) {
  request.get(url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      return "data:" + response.headers["content-type"] + ";base64," + new Buffer(body).toString('base64');
    }
  });
}

我不清楚实现此目标的最佳方法是什么……承诺?嵌套的回调?在ES6或ES7中使用某些东西,然后与Babel进行转换?

目前实现此目的的最佳方法是什么?

谢谢!

回答如下:

一种方法是Promise.all (ES6)。

此答案将在Node 4.0+中起作用。较旧的版本将需要Promise polyfill或库。我还使用了ES6箭头功能,可以将其替换为节点<4的常规Promise.all

[此技术以Promise手动包装function。您也可以使用request.get之类的库。

request-promise
发布评论

评论列表 (0)

  1. 暂无评论