问题列表 - 第238786页

如何为es2017 javascript async/await函数创建全局错误处理程序?

Bluebird 3.4.1 for promises,Chrome 56,Babel 6.23.1

鉴于:

  async login() {
    try {
      let response = await this.authservice.login('invalid-credentials');
    } catch (error) {

    }
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码模拟了一个带有json对象的401响应错误,该对象具有从服务器返回的特定错误消息,该消息确实触发了catch语句.但是,我不想为每个catch语句处理错误,而是希望有一个全局错误处理程序.

在非异步函数中,我使用window.onerror按预期工作的事件.但是,这不适用于异步功能.

我还添加了活动

window.addEventListener('unhandledrejection')
window.addEventListener('rejectionhandled')
Run Code Online (Sandbox Code Playgroud)

这些事件不会触发上述情况(它们会触发其他情况).相反,bluebird返回"警告承诺被拒绝且非错误:[对象响应]".

this.authservice.login是使用使用标准的承诺与语法的异步函数库.

如果我在catch语句中抛出一个新错误,我可以得到错误最终冒泡到unhandledrejection事件.但是,上面的函数是从另一个函数调用的,我必须在两个函数中抛出一个错误,以便触发全局未处理的反射.

总之,我试图为所有async/awaits和promises创建一个全局错误处理程序.

javascript async-await bluebird

6
推荐指数
0
解决办法
510
查看次数

具有复杂条件的Spark SQL窗口函数

这可能是最容易通过示例解释的.假设我有一个用户登录网站的DataFrame,例如:

scala> df.show(5)
+----------------+----------+
|       user_name|login_date|
+----------------+----------+
|SirChillingtonIV|2012-01-04|
|Booooooo99900098|2012-01-04|
|Booooooo99900098|2012-01-06|
|  OprahWinfreyJr|2012-01-10|
|SirChillingtonIV|2012-01-11|
+----------------+----------+
only showing top 5 rows
Run Code Online (Sandbox Code Playgroud)

我想在此列添加一个列,指示他们何时成为网站上的活跃用户.但有一点需要注意:有一段时间用户被认为是活动的,在此期间之后,如果他们再次登录,他们的became_active日期会重置.假设这段时间是5天.然后从上表派生的所需表将是这样的:

+----------------+----------+-------------+
|       user_name|login_date|became_active|
+----------------+----------+-------------+
|SirChillingtonIV|2012-01-04|   2012-01-04|
|Booooooo99900098|2012-01-04|   2012-01-04|
|Booooooo99900098|2012-01-06|   2012-01-04|
|  OprahWinfreyJr|2012-01-10|   2012-01-10|
|SirChillingtonIV|2012-01-11|   2012-01-11|
+----------------+----------+-------------+
Run Code Online (Sandbox Code Playgroud)

因此,特别是,SirChillingtonIV的became_active日期被重置,因为他们的第二次登录是在活动期过期之后,但是Booooooo99900098的became_active日期没有在他/她登录的第二次重置,因为它落在活动期间.

我最初的想法是使用窗口函数lag,然后使用lagged值填充became_active列; 例如,大致类似于:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

val window = Window.partitionBy("user_name").orderBy("login_date")
val df2 = df.withColumn("tmp", lag("login_date", 1).over(window))
Run Code Online (Sandbox Code Playgroud)

然后,规则填写became_active日期会是这样,如果tmpnull(即,如果它是第一次登录),或者如果login_date - tmp >= 5再 …

sql window-functions apache-spark apache-spark-sql pyspark

22
推荐指数
2
解决办法
2万
查看次数

DecimalFormat.applyPattern("#.##0,00") 抛出异常

对于代码:

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(locale);
df.applyPattern("#.##0,00");
Run Code Online (Sandbox Code Playgroud)

它抛出一个 IllegalArgumentException 并带有格式错误的模式“#.##0,00”的消息

这有什么问题?

编辑:我想使用 . 作为千位分隔符和 , 作为小数点。我知道这是倒退,但有一个案例,那就是他们想要的格式。

java decimalformat

4
推荐指数
1
解决办法
8296
查看次数

如何将列表作为参数传递给存储过程?

希望传递用户ID列表以返回列表名称.我有计划处理输出的名称(使用COALESCE或其他东西),但试图找到传递用户ID列表的最佳方法.我的sproc的内容看起来像这样:

create procedure [dbo].[get_user_names]
@user_id_list, --which would equal a list of incoming ID numbers like (5,44,72,81,126)
@username varchar (30) output
as
select last_name+', '+first_name 
from user_mstr
where user_id in @user_id_list
Run Code Online (Sandbox Code Playgroud)

传递@user_id_list的值是我的主要关注点.

sql sql-server stored-procedures

31
推荐指数
5
解决办法
7万
查看次数

当用户询问时自动将用户添加到频道

我想做一个非常简单的项目来做到这一点:

一个用户(让我们称他为 John)打开与我的机器人的 Telegram 聊天,并输入以下内容:

用户约翰:/join channel1

我的机器人响应将用户“John”添加到频道“channel1”

这其实就是我想要的。问题是 Telegram BOT API 没有实现任何将用户添加到组的方法。我尝试使用电报-cli,但“chat_add_user”似乎只接受将用户添加到聊天中,而不接受添加到群组中。

有什么办法可以将用户添加到这样的频道吗?(无需手动操作)还是我应该忘记这一点?

谢谢!

telegram

14
推荐指数
2
解决办法
2万
查看次数

异步生成器不是迭代器?

在Python中,您可以编写一个可迭代的生成器,如:

def generate(count):
    for x in range(count):
        yield x

# as an iterator you can apply the function next() to get the values.
it = generate(10)
r0 = next(it)
r1 = next(it) ...
Run Code Online (Sandbox Code Playgroud)

尝试使用异步迭代器时,会出现'yield inside async'错误.建议的解决方案是实现自己的生成器:

class async_generator:
    def __aiter__(self):
        return self
    async def __anext__(self):
        await asyncio.sleep()
        return random.randint(0, 10)

# But when you try to get the next element
it = async_generator(10)
r0 = next(it)
Run Code Online (Sandbox Code Playgroud)

你得到错误"'async_generator'对象不是迭代器"

我认为如果你打算把它称为迭代器,因为它具有完全相同的接口,所以我可以编写异步迭代器并在依赖于next()调用的框架上使用.如果您需要重写整个代码以便能够使用异步,那么任何新的Python功能都是没有意义的.

我错过了什么吗?

谢谢!

python python-asyncio

14
推荐指数
3
解决办法
9330
查看次数

std :: is_arithmetic对于通用lambda中的int类型返回false:未定义的行为?

考虑:

#include <iostream>
#include <typeinfo>
#include <type_traits>

#include <cxxabi.h>

#include <boost/hana.hpp>
namespace hana = boost::hana;

struct Person {
  BOOST_HANA_DEFINE_STRUCT(Person,
    (std::string, name),
    (int, age)
  );
};

template<typename T>
void stringify(const T& v) {
    hana::for_each(hana::accessors<T>(), [&v](auto a) {
        // Here I'm printing the demangled type, just to make sure it is actually the type I'm thinking it is.
        std::cout << abi::__cxa_demangle(typeid(decltype(hana::second(a)(v)){}).name(), 0, 0, 0);

        // If the value is arithmetic, "quote" should be an empty string. Else, it should be an actual …
Run Code Online (Sandbox Code Playgroud)

c++ gcc type-traits c++14 boost-hana

3
推荐指数
1
解决办法
151
查看次数

为什么Java集合不提供方便的映射方法?

我想知道为什么Java Collections API不包含map不同集合类型的方便方法.我想写一些类似的东西:

List<Foo> list = ...;    
List<String> result = list.map(Foo::toString);
Run Code Online (Sandbox Code Playgroud)

相反,我必须创建一个流,地图和收集,如下所示:

List<Foo> list = ...; 
List<String> result = list.stream().map(Foo::toString).collect(toList());
Run Code Online (Sandbox Code Playgroud)

难道不像在java.util.List接口中实现这个默认方法那么容易吗?例如

default <R> List<R> map(Function<E, R> mapper){
    return stream().map(mapper).collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

乍一看,似乎有其他方便的方法.例如:

list.stream().forEach(x -> {});
Run Code Online (Sandbox Code Playgroud)

可写成

list.forEach(x -> {});
Run Code Online (Sandbox Code Playgroud)

但是,比较并不是那么好.Iteratable.forEach是顶级接口上的默认方法,不需要指定返回类型.它不是在引擎盖下创建一个流,而是使用Iteratables属性来......好......迭代所有元素.

所以问题仍然存在:为什么不在每个Collections API接口上都有map方法?也许是因为它不够灵活,因为你需要决定一个返回类型?

我确信实现者已经考虑过它,并且有理由不把它放进去.我想了解原因.

java collections java-stream

5
推荐指数
1
解决办法
88
查看次数

使用 Mocha 和 Sinon 测试 Mailgun .send() 方法

我正在尝试为通过 ping Mailgun API 发送电子邮件的快速中间件函数编写单元测试。

module.exports = {
  sendEmail: function (req, res) {
    let reqBody = req.body;
    let to = reqBody.to;
    let from = reqBody.from;
    let subject = reqBody.subject;
    let emailBody = reqBody.body;

    let data = {
      from: from,
      to: to,
      subject: subject,
      text: emailBody
    };

    mailgun.messages().send(data, function (error, body) {
      if (error) {
        res.status(400).json(error);
        return;
      }
      res.status(200).json(body);
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

测试文件:

  describe('\'sendEmail\' method', () => {
    let mailgun;
    beforeEach(() => {
      mailgun = require('mailgun-js')({ apiKey: MAIL_GUN_API_KEY, domain: MAIL_GUN_DOMAIN }); …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocha.js node.js sinon mailgun

3
推荐指数
1
解决办法
1062
查看次数

是否可以将一种类型的数组转换为大小不同的另一种类型的数组?

例如,我可以采取

int array[12];
Run Code Online (Sandbox Code Playgroud)

并简单地通过转换指针将其转换为 a char[48],并假设int我的机器上是 4 个字节?正确的语法是什么?它是否普遍适用?

我知道新数组的大小不会是明确的,我必须再次自己进行除法,因为我知道在我的机器上int是 4 个字节。

c++ arrays casting

3
推荐指数
1
解决办法
5081
查看次数