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创建一个全局错误处理程序.
这可能是最容易通过示例解释的.假设我有一个用户登录网站的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
,然后使用lag
ged值填充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
日期会是这样,如果tmp
是null
(即,如果它是第一次登录),或者如果login_date - tmp >= 5
再 …
对于代码:
DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(locale);
df.applyPattern("#.##0,00");
Run Code Online (Sandbox Code Playgroud)
它抛出一个 IllegalArgumentException 并带有格式错误的模式“#.##0,00”的消息
这有什么问题?
编辑:我想使用 . 作为千位分隔符和 , 作为小数点。我知道这是倒退,但有一个案例,那就是他们想要的格式。
希望传递用户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的值是我的主要关注点.
我想做一个非常简单的项目来做到这一点:
一个用户(让我们称他为 John)打开与我的机器人的 Telegram 聊天,并输入以下内容:
用户约翰:/join channel1
我的机器人响应将用户“John”添加到频道“channel1”
这其实就是我想要的。问题是 Telegram BOT API 没有实现任何将用户添加到组的方法。我尝试使用电报-cli,但“chat_add_user”似乎只接受将用户添加到聊天中,而不接受添加到群组中。
有什么办法可以将用户添加到这样的频道吗?(无需手动操作)还是我应该忘记这一点?
谢谢!
在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功能都是没有意义的.
我错过了什么吗?
谢谢!
考虑:
#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) 我想知道为什么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方法?也许是因为它不够灵活,因为你需要决定一个返回类型?
我确信实现者已经考虑过它,并且有理由不把它放进去.我想了解原因.
我正在尝试为通过 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) 例如,我可以采取
int array[12];
Run Code Online (Sandbox Code Playgroud)
并简单地通过转换指针将其转换为 a char[48]
,并假设int
我的机器上是 4 个字节?正确的语法是什么?它是否普遍适用?
我知道新数组的大小不会是明确的,即我必须再次自己进行除法,因为我知道在我的机器上int
是 4 个字节。
c++ ×2
java ×2
sql ×2
apache-spark ×1
arrays ×1
async-await ×1
bluebird ×1
boost-hana ×1
c++14 ×1
casting ×1
collections ×1
gcc ×1
java-stream ×1
javascript ×1
mailgun ×1
mocha.js ×1
node.js ×1
pyspark ×1
python ×1
sinon ×1
sql-server ×1
telegram ×1
type-traits ×1
unit-testing ×1