【发布时间】:2014-06-02 04:36:33
【问题描述】:
我正在开展一个项目,该项目涉及向不同的 API 发出多个 HTTP GET 请求,每个请求都需要最后一个的信息。我试图避免嵌套回调和反地狱,并一直试图让它与async 模块一起工作。
这是我需要做的:我有一个包含 1..n 个课程标识符 (['2014/summer/iat/100/d100', '2014/spring/bisc/372/d100']) 的数组。对于数组中的每门课程,我需要通过 HTTP GET 获取其课程大纲。
生成的轮廓如下所示:
{
"info": {
"nodePath": "2014/spring/bisc/372/d100",
"number": "372",
"section": "D100",
"title": "Special Topics in Biology",
"term": "Spring 2014",
"description": "Selected topics in areas not currently offered...",
"name": "BISC 372 D100",
"dept": "BISC",
},
"instructor": [
{
"lastName": "Smith",
"commonName": "Frank",
"phone": "1 555 555-1234",
"email": "franksmith@school.edu",
"name": "Frank Smith",
"roleCode": "PI"
},
{
"lastName": "Doe",
"commonName": "John",
"phone": "1 555 555-9876",
"email": "johndoe@school.edu",
"name": "John Doe",
"roleCode": "PI"
}
]
}
(省略了一堆不相关的字段)
每个大纲对象可能包含一个instructor 属性,该属性是课程的 0..n 个讲师对象的数组。对于instructor 数组的每个成员,我需要调用另一个API 来获取更多数据。当该调用返回时,我需要将其插入到正确的讲师对象中。
最后,当一切都完成后,数据会被传递到一个模板以供 express 呈现并返回给客户端。
我已经尝试使用async 来实现这项工作,并且在进行概念验证时使用async.waterfall 取得了一些成功,只获得了一个讲师简介(例如,不循环数组,只是获得讲师[ 0])。 async 模块的文档很全面,但是非常密集,我很难确定我真正需要做什么。我有各种嵌套异步调用的科学怪人组合,但仍然无法正常工作。
我真的不在乎我是如何完成任务的——流程控制、承诺、魔法精灵粉等等。任何提示都非常感谢。
【问题讨论】:
标签: node.js asynchronous async.js