栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Node.js异步请求在Redis中进行循环

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Node.js异步请求在Redis中进行循环

您有两个主要问题。

  1. 您的

    phoneNumber
    变量将不是您想要的变量。可以通过更改 数组的
    .forEach()
    .map()
    迭代来解决此问题,因为这将为当前变量创建局部函数作用域。

  2. 您已经创建了一种方法来知道所有异步操作何时完成。有很多重复的问题/答案显示了如何执行此操作。您可能要使用

    Promise.all()

我建议这种解决方案利用您已经拥有的承诺:

function getContactList(contacts) {    var contactList = {};    return Promise.all(contacts.filter(utils.isValidNumber).map(function(phoneNumber) {        return db.client().get(phoneNumber).then(function(reply) { // build custom object constactList[phoneNumber] = reply;        });    })).then(function() {        // make contactList be the resolve value        return contactList;    });}getContactList.then(function(contactList) {    // use the contactList here}, funtion(err) {    // process errors here});

运作方式如下:

  1. 调用
    contacts.filter(utils.isValidNumber)
    以将数组过滤为仅有效数字。
  2. 调用
    .map()
    以遍历该过滤后的数组
  3. return db.client().get(phoneNumber)
    .map()
    回调创建一个promise数组。
  4. 获取电话号码的数据后,将该数据添加到您的自定义
    contactList
    对象中(这实际上是
    .map()
    循环的副作用。
  5. Promise.all()
    在返回的promise数组上使用,以了解它们何时完成。
  6. 使
    contactList
    我们建立的对象成为返回的Promise的resolve值。
  7. 然后,要调用它,只需使用返回的promise
    .then()
    即可获得最终结果。当您已经承诺可以返回时,无需添加回调参数。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号