热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript–在地图中调用异步函数的最佳方法?

我正在映射数组,并且对于新对象的返回值之一,我需要进行异步调用.varfirebaseDatateachers.map(function(teacher){return{name:

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

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箭头函数,你可以用Node<的常规函数​​替换它们. 4.
此技术使用Promise手动包装request.get.您也可以使用像request-promise这样的库.

function urlToBase64(url) {
return new Promise((resolve, reject) => {
request.get(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
resolve("data:" + response.headers["content-type"] + ";base64," + new Buffer(body).toString('base64'));
} else {
reject(response);
}
});
})
}
// Map input data to an Array of Promises
let promises = input.map(element => {
return urlToBase64(element.image)
.then(base64 => {
element.base64Data = base64;
return element;
})
});
// Wait for all Promises to complete
Promise.all(promises)
.then(results => {
// Handle results
})
.catch(e => {
console.error(e);
})


推荐阅读
  • 本文探讨了在JavaScript中如何有效地从服务器控件DropDownList中获取绑定的ID值,而非仅仅是显示的文本值。这对于需要根据用户选择动态处理数据的应用场景非常有用。 ... [详细]
  • Lua基本语法lua与C#的交互(相当简单详细的例子)
    lua脚本与C#的交互本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验——高分辨率用户请根据需求调整网页缩放比例)1LuaAndC#——L ... [详细]
  • OpenCV—python 角点特征检测之一(cornerHarris、ShiTomasi、FAST)
    OpenCV—python角点特征检测之一(cornerHarris、Shi-Tomasi、FAST),Go语言社区,Golang程序员人脉社 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 本文详细解析了LeetCode第581题——最短无序连续子数组的解决方案,重点介绍了贪心算法的应用及其具体实现步骤。 ... [详细]
  • 本文详细介绍了中心方形数的概念及其计算方法,并提供了多种编程语言下的实现代码。 ... [详细]
  • HTML5 拖拽功能实现
    本文通过一个简单的示例,展示了如何利用 HTML5 的拖放 API 实现元素之间的拖拽功能。示例包括 HTML 结构、CSS 样式以及 JavaScript 逻辑,旨在帮助开发者快速理解和应用拖拽技术。 ... [详细]
  • 本文探讨了归并排序算法在求解逆序数问题中的应用,并对比分析了两种实现方法。第一种方法使用指针和动态数组,存在内存管理上的风险;而第二种方法通过引入临时数组简化了实现过程,提高了代码的健壮性和可读性。 ... [详细]
  • Firefox 实现正则表达式作为函数调用的非标准扩展
    Firefox 引入了一项非标准的 JavaScript 扩展,允许正则表达式像普通函数一样被调用,从而简化了正则表达式的使用。这项特性在早期曾考虑纳入 ECMAScript 4 标准,但最终未能成行。 ... [详细]
  • 本文探讨了如何使用 JavaScript 解决 LeetCode 上的一道经典算法题——寻找和为指定值 s 的所有连续正整数序列。文章提供了详细的代码实现及算法分析。 ... [详细]
  • 2023年PHP处理请求超时的全面指南
    本文详细介绍了在PHP中处理请求超时的各种方法,包括设置脚本执行时间、处理file_get_contents函数超时以及优化AJAX请求等,适合开发者参考学习。 ... [详细]
  • 查找数组中的重复元素
    问题描述:给定一个长度为n的数组,其中所有元素值位于0至n-1之间。数组中存在一些重复的数字,但具体哪些数字重复以及重复了多少次未知。本文章将探讨如何高效地找到数组中的任一重复数字。 ... [详细]
  • 本题要求根据给定的正整数数组,通过合理排列各元素顺序,生成并输出所有可能组合中的最小值。例如,对于数组{3, 32, 321},正确的输出应为321323。 ... [详细]
  • 本文介绍了DOM中用于获取节点信息的关键属性,包括父节点、子节点列表、首个及末个子节点、相邻兄弟节点以及节点类型等,同时提供了每个属性的具体使用说明。 ... [详细]
  • 本文面向非计算机专业背景的编程爱好者,介绍如何仅使用基础的C语言知识——二维数组和结构体,无需掌握复杂的数据结构如链表,即可编写一款经典的贪食蛇游戏。通过本教程,您将了解游戏开发的基本原理和实现方法。 ... [详细]
author-avatar
GIfi炬辉_904
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有