Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >正确等待一系列承诺是否被拒绝

正确等待一系列承诺是否被拒绝
EN

Stack Overflow用户
提问于 2019-05-24 11:28:00
回答 1查看 191关注 0票数 0

我试着做一个简单的网站,发送一些推送通知。下面是代码的一部分:

代码语言:javascript
运行
AI代码解释
复制
function getSubscribers() {
    var subscribers = {};
    try {
        var subscribersRaw = fs.readFileSync(SUBSCRIBERS_PATH);
        subscribers = JSON.parse(subscribersRaw);
    } catch (err) {}
    return subscribers;
}


function setSubscribers(data) {
    fs.writeFileSync(SUBSCRIBERS_PATH, data);
}


function sendNotifications(req, res) {
    var message = "message";
    var icon = "icon.png"
    var subscribers = getSubscribers();

    var subscriber_deleted = 0;

    for (var subid in subscribers) {
        const subscription = subscribers[subid];
        const payload = {
            message: message,
            icon : icon
        };
        const options = {
            TTL: 3600
        };
        webPush.sendNotification(subscription, JSON.stringify(payload), options)
            .then(function() {})
            .catch(function(error) {
                console.log(error);
                if (error.statusCode === 410) {
                    delete subscribers[subid];
                    subscriber_deleted = 1;
                }
            });
    }

    if(subscriber_deleted==1)
    {
        setSubscribers(JSON.stringify(subscribers));
    }

}

主要问题是webPush.sendNotification在sendNotifications函数中的应用。webPush.sendNotification返回一个承诺,该承诺在成功或失败时返回相同的对象。主要的区别是返回对象内部的错误代码,类似于http代码。如果代码返回等于410,则有必要下次不重新发送通知。

由于webPush.sendNotification的异步性,这部分是无用的。

代码语言:javascript
运行
AI代码解释
复制
if(subscriber_deleted==1)
{
    setSubscribers(JSON.stringify(subscribers));
}

我试图使用Promise.all,特别是“最终”函数,但没有成功。

如何妥善处理这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 12:20:40

好的,

你在一个文件里有一个被征服者的名单。你从装货开始。然后,以异步方式向所有订阅者发送通知。如果被征服者发送代码411,您可以在内存和文件中将其从列表中删除。

这样可以吗?

使用promise.all是一种很好的方法,因此您必须构建一个返回承诺的函数数组,以满足promise.all的需求。然后,您可以等待它来正确地检查某个调用是否失败,这意味着您需要在磁盘上重写suscriber列表。

所以:

  • 移动分隔方法“sendNotification”中的for循环内容,接受参数"subid“并返回sendNotification().then.catch的结果
  • 使用await promise.all(suscribers.keys().map(notify))

由于您返回了catch的结果,所以拒绝sendNotification不会停止等待promise.all

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56298575

复制
相关文章
[MFC]模态与非模态对话框
当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。
祥知道
2020/03/10
1.6K0
Qt模态对话框和非模态对话框
Qt 中使用QDialog类实现对话框。我们的对话框通常继承自QDialog。对话框分为模态对话框和非模态对话框。所谓模态对话框,就是会阻塞同一应用程序中其它窗口的输入。Qt使用QDialog::exec()来实现模态对话框。如下所示:
zy010101
2020/04/10
3.5K0
Qt模态对话框和非模态对话框
mfc 创建模态对话框与非模态对话框
所谓模态对话框就是该对话框被创建后,其父窗口不能响应任何消息,无法操作,只有在关闭了新创建出来的窗口后才能继续操作其后面的父窗口。而非模态对话框则不会有这种情况,非模态对话框创建完成后不影响父窗口的操作,两个窗口可以同时响应消息。
我与梦想有个约会
2023/10/20
3920
mfc 创建模态对话框与非模态对话框
8.QT-对话框(模态与非模态)
对话框介绍 对话框是于用户进行简易交互的顶层窗口 QDialog是Qt中所有对话框窗口的父类,是一种容器类型的组件 QDialog继承于QWidget类,如下图所示: QWidget和QDialog有
诺谦
2018/05/28
2K0
PyQt5 非模态对话框(apply 型)
如果希望用户可以重复更改对话框中的参数并能马上看到修改结果,那么就要使用非模态对话框,这样用户就可以按照他们喜欢的方式来持续不断地修改数据并验证修改的结果了。
用户6021899
2019/08/13
1.3K0
PyQt5 非模态对话框(live 型)
本篇介绍非模态“实时”(live)对话框。与上一篇讲的”apply型“非模态对话框的区别是,非模态“实时”(live)对话框没有任何按钮,且所做的任何改变会自动、即刻得到应用。
用户6021899
2019/08/14
1.6K0
PyQt5 模态对话框
所谓的模态对话框是指,一旦调用该对话框,它就会成为应用程序唯一能与用户进行交互的部件。在关闭对话框之前,用户都不能使用应用程序的其他部件。模态对话框是最简单的,因为会阻塞与对话框的父窗口及父窗口的兄弟窗口之间的其他任何交互,所以可降低对那些正在使用的数据在后台被修改的风险。模态对话框的缺点是用户不能实时地看到修改效果。
用户6021899
2019/08/13
2.4K0
QT从控件部分知识点整理
2.设置可以停靠的区域,例如:只能停靠在左和右 3.设置工具栏是否可以浮动,即工具栏要么停靠在左边,要么停靠在右边,一撒手就立刻回去了 4.设置移动:如果传入一个false,则表示该工具栏无法拖拽移动
大忽悠爱学习
2021/11/15
1.1K0
bootstrap bootstrap-modal.js 模态对话框
<!doctype html> <html> <head> <meta charset="utf-8"> <title>联想控股</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> <script src="http://code.jquery.com/jquery.js"></script> <script src="js/bootstrap.min.js"></script> </head> <body> <button type="button" class="btn btn-danger" data-toggle="modal" data-target=".ex-modal-lg">大模态框</button> <div class="modal fade ex-modal-lg" tabindex="-1" role="dialog" aria-labelledby="largerModal"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <div class="modal-header">larger modal header</div> <div class="modal-body"> <img src="img/img.jpg" style="padding: 5px;"> larger modal body</div> <div class="modal-footer">larger modal footer</div> </div> </div> </div> <button type="button" class="btn btn-primary" data-toggle="modal" data-target=".ex-modal-sm">小模态框</button> <div class="modal ex-modal-sm" tabindex="-1" role="dialog" aria-labelledby="smallmodal"> <div class="modal-dialog modal-sm" role="document"> <div class="modal-content"> <div class="modal-header">small modal header</div> <div class="modal-body"> <img src="img/img.jpg" style="padding: 5px;"> small modal body</div> <div class="modal-footer">small modal footer</div> </div> </div> </div> </body> </html>
用户5760343
2019/07/07
3.2K0
模态对话框-B 类产品设计细节:对话框 vs 抽屉
  说明:对话框和抽屉都是在当前页面之上覆盖出现的组件,让用户在不离开主路径的情况下,查看信息/提示/反馈,或快速执行某些的操作。两者的交互模式有类似之处,使用场景也有所重叠。本文对两个组件的主要差别进行了对比,并提供方法帮助大家快速判断应该选择哪一个。
宜轩
2022/12/29
1.8K0
一个WPF开发的打印对话框-PrintDialogX
今天介绍一个WPF开发的打印对话框开源项目-PrintDialogX[1],该开源项目由《WPF开源项目:AIStudio.Wpf.AClient》[2]作者推荐。
沙漠尽头的狼
2022/06/10
5860
一个WPF开发的打印对话框-PrintDialogX
CSS中的浮动和清除浮动,梳理一下!
从业三年,项目无数,现在回过头来,想要把一些重要的知识用白话整理出来:这个东西是什么?怎样才是最佳实践?希望对自己知识体系有梳理作用, 也希望对大家有些许帮助。 前端技术栈更新太快,眼花缭乱,大家一个劲揽过来学习的时候,别忘了回头看看那些已经掌握的基础知识。 第一篇就整理整理CSS中很常见的浮动以及清除浮动的一些方式吧。 浮动到底是什么? 浮动核心就一句话:浮动元素会脱离文档流并向左/向右浮动,直到碰到父元素或者另一个浮动元素。请默念3次! 浮动最初设计的目的并没那么多事儿,就只是用来实现文字环绕效果而已,
用户1667431
2018/04/18
1.7K0
CSS中的浮动和清除浮动,梳理一下!
VS2010/MFC编程(对话框:模态对话框及其弹出过程)
讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。    一.模态对话框和非模态对话框        Windows对话框分为两类:模态对话框和非模态对话框。        模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。        非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。        大家对Windows系统很了解,相信这两种对
互联网金融打杂
2018/04/03
2.9K0
VS2010/MFC编程(对话框:模态对话框及其弹出过程)
学习WPF——了解WPF中的XAML
XAML的简单说明 XAML是用于实例化.NET对象的标记语言,主要用于构建WPF的用户界面 XAML中的每一个元素都映射为.NET类的一个实例,例如<Button>映射为WPF的Button对象 XAML可以在一个元素中嵌套另一个元素,例如Grid元素可以嵌套Button元素 了解XAML VisualStudio创建一个窗口,默认情况下产生的代码如下: 这段代码中包含两个标记元素,一个是Window,一个是Grid Window是WPF顶级元素的一种,还有另外两种顶级元素Page和App
liulun
2018/01/12
2K0
Qt入门系列(二)
选中mainWindow.cpp右键->在Explor中显示->粘贴进来(显示包含的目录)
用户9831583
2022/06/16
2K0
Qt入门系列(二)
直击本质:WPF 框架是如何实现模态窗口的
想知道你在 WPF 编写 Window.ShowDialog() 之后,WPF 框架是如何帮你实现模态窗口的吗?
walterlv
2023/10/22
6900
WPF中的MatrixTransform
WPF中的MatrixTransform            周银辉 虽然在WPF中可以使用TranslateTransform、RotateTransform、ScaleTransform等进行
菩提树下的杨过
2018/01/22
1.4K0
WPF中的MatrixTransform
HTML中CSS浮动布局的特点
浮动元素会脱离标准流(简称:脱标),在标准流中不占位置。 ※ 相当于从地面飘到了空中,如果一个元素按照正常的标准流来显示,会在html中所属的位置上占位,后面的元素会紧跟着它,但是浮动脱离了标准流,以后我们在看到浮动的元素之后,不能以正常的标准流里进行判断。 浮动元素比标准流高半个级别,可以覆盖标准流中的元素。 浮动找浮动,下一个浮动元素会在上一个浮动元素后面左右浮动。 浮动元素会受到上面元素边界的影响。 浮动元素有特殊的显示效果: ※ 一行可以显示多个,不管元素是行内元素还是块级元素,设置浮动后,将来显示
岳泽以
2022/10/26
2.7K0
WPF 中的 NameScope
发布于 2018-10-14 12:23 更新于 2018-10-16 13:01
walterlv
2020/02/10
7590
Qt 学习记录
[],标识一个 Lambda 的开始,这部分必须存在,不能省略。外部变量访问方式说明符只能使用定义 Lambda 为止时 Lambda 所在作用范围内可见的局部变量(包括 Lambda 所在类的 this)。外部变量访问方式说明符有以下形式:
小简
2023/01/04
7.2K0
Qt 学习记录

相似问题

Kurento:多个中翅片钳

27

整理错误的查询?翅片组

14

Modelica诉Simscape

310

MATLAB Simscape模型不输出扭矩或抛出错误

16

如何提高基于Simscape物理模型的仿真速度?

139
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文