最后async/ await将在IE以外的所有主流浏览器中得到支持.所以现在我们可以用async/ 开始编写更易读的代码了.await但是有一个问题.很多人使用异步等待这样:
const userResponse = await fetchUserAsync();
const postsResponse = await fetchPostsAsync();
Run Code Online (Sandbox Code Playgroud)
虽然这个代码是可读的,但它有一个问题,它会串行运行这些函数,在完成用户的提取之前它不会开始提取帖子.解决方案很简单,我们需要并行获取资源.
所以我想做的是(伪语言):
fn task() {
result-1 = doAsync();
result-2 = doAsync();
result-n = doLongAsync();
// handle results together
combinedResult = handleResults(result-1, result-2);
lastResult = handleLastResult(result-n);
}
Run Code Online (Sandbox Code Playgroud) 我决定尝试使用Windows 10,但是在终端可以在WebStorm/PhpStorm中运行时遇到问题.
当我打开终端时,有时它是完全黑色的,有时它会加载项目文件夹,但我不能在那里打字.有一种方法可以在外部窗口中运行它,但我习惯于在WebStorm/PhpStorm中使用内部窗口等控制台......
我试过cmd,Power Shell - 结果相同.
有任何想法吗?
我正在使用Firebase的电子邮件/密码登录方法.我想将用户保存到实时数据库中的数据加密,然后再将其发送到数据库.Firebase已经处理了用户密码,但是我能以某种方式使用它来加密无法仅由客户端解密的数据吗?如果我能用客户端sdk实现它会很好.
所以我的流程将是这样的:
encryption firebase firebase-authentication firebase-realtime-database
如果您的Node.js代码中充满了console.log语句,您是否会引发性能问题?是否值得调试/生产切换这个开/关?我意识到日志记录对于一般情况来说很重要 - 但我一般都很好奇控制台输出是否会受到性能影响?
在chrome中的客户端脚本中,如果控制台处于打开状态,它肯定会降低性能.
在 VS Code 中,我必须先运行构建任务,然后开始调试,而在 CLion 中,我只需单击调试,然后它会在必要时自动构建并开始调试。有没有办法在 VS Code 中自动执行此操作?
我设置了一个新帐户,但未验证我的域名.我想在继续验证和添加付款信息之前测试并确认邮件发送.
我尝试使用沙箱方法和api密钥(包括smtp)进行curl.我还尝试使用顶级帐户邮件地址作为收件人使用我的域名.但每次发送命令(curl和smtp)我都得到"Mailgun Magnificent API"响应 - 但没有邮件发送.到目前为止,Mailgun API看起来并不那么壮观......我已多次浏览文档,无法找到我可能做错的事情..
任何帮助深表感谢.
在调用其他域时,在实际POST,UPDATE,PUT或DELETE请求之前发送OPTION请求的原因是什么?(所以关于CORS请求)我知道它应该检查服务器是否可以处理真实请求,但为什么不立即发送真实请求?
我想到的一些原因:
有人可以了解浏览器供应商在调用其他域时实施OPTION请求的原因吗?
我必须通过静态出站 IP 同步一些数据,我需要事先将这些数据列入数据提供商的白名单。因此,我想为 ACI(Azure 容器实例)配置静态出站 IP 地址。如果没有经济高效的方法来执行此操作,我也可以决定将其配置为应用服务 Web 应用程序,但是,由于资源隔离,ACI 是首选。(因此,一名行为不端的工人无法让整个工人池瘫痪。)
作为参考,这里是我想要实现的目标的简单图表。为简单起见,我将 Web Apps 和 ACI 添加到映像中,但我只需要其中之一,最好是 ACI。
我在过去几天阅读了相关的微软文档,所以我知道有多种方法可以做到这一点,但是,令我惊讶的是官方解决方案比我想象的要复杂和昂贵得多。
我尝试过的事情
为应用服务 Web 应用配置 NAT
这可行,但不是所需的解决方案。我可以将 Web 应用程序放入 vNet 中的子网中,然后使用该子网的静态 IP 地址配置NAT 网关。这按预期工作,运行
curl api.ipify.org.
Run Code Online (Sandbox Code Playgroud)
Web 应用程序内将返回我在 NAT 网关中配置的静态 IP 地址。此方法的问题在于,它使用的 Web 应用程序在同一应用程序服务计划上的应用程序之间没有资源使用隔离。
使用 ACI 在 vNet 前面部署防火墙
这是文档中建议的“官方方法”。(顺便说一句,我永远无法按照指南使其工作,但这不是主要问题。)我的主要问题是复杂性和价格。我们不需要防火墙,添加一个防火墙和管理它的负担是我们在这个特定项目中不需要的额外复杂性。价格也很荒谬,我们想要配置一个静态出站 IP,而建议的方式所带来的价格涨幅比我们为应用程序的其余部分支付的价格还要大。(我们每月支付约 400 美元,防火墙起价约 600 美元。)
所以这不是首选。
在包含 ACI 的 vNet …
当node.js中需要一个模块时,它会多次返回相同的对象,因为require()缓存了之前的调用.
假设我有一个主记录器模块可以注册子记录器模块.(那些使记录实际上通过主记录器模块log()功能.但它在这里没有关联.)
我在主记录器模块中有类似的东西来添加子模块:
module.addRedisLogger = function(rclient) {
modulesArray.push(require('./redis.js')(rclient, loggingEnabled, module));
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个redis客户端实例时,我可以立即向它添加一个logger,如下所示:
var sub = redis.createClient();
logger.addRedisLogger(sub);
Run Code Online (Sandbox Code Playgroud)
在子模块中,我开始像这样记录:
module.startLogging = function() {
rclient.on("message", messageCallback);
rclient.on("pmessage", pmessageCallback);
}
Run Code Online (Sandbox Code Playgroud)
并停止记录如下:
module.stopLogging = function() {
rclient.removeListener("message", messageCallback);
rclient.removeListener("pmessage", pmessageCallback);
}
Run Code Online (Sandbox Code Playgroud)
但据我所知,使用这种技术我只能分配一个redis记录器实例,因为分配第二个将返回require()与第一个相同的对象,因此传递新redis参数将覆盖以前的值.因此,由于调用它而无法停止第一个redis logger实例中的日志记录,因此将停止第二个实例中的日志记录.
让我们看一个例子:
var sub1 = redis.createClient();
var sub2 = redis.createClient();
sub1.subscribe("joinScreen1");
sub2.subscribe("joinScreen2");
logger.addRedisLogger(sub1);
logger.addRedisLogger(sub2);
// running redis-cli PUBLISH joinScreen1 message1
// running redis-cli PUBLISH joinScreen2 message2
logger.log("Lets stop the first logger);
logger.modulesArray[0].stopLogging()
// running …Run Code Online (Sandbox Code Playgroud) 我使用 Shapes 和 Canvas,我想制作类似地图编辑器的东西。当鼠标在画布上移动时,每次移动时我都会将实际选定的对象绘制到画布上的鼠标位置,这样使用该程序的人就可以看到该对象放置在那里时的样子。
单击鼠标时,我将当前对象/位置添加到列表中,其中包含每次更新时需要在画布上绘制的放置元素。
问题是,如果鼠标移动处理程序处于活动状态(绑定到画布),则不会始终触发单击事件,我需要连续单击大约十次单击来放置元素。如果未绑定鼠标移动事件,则单击效果良好。
我制作了一个 GIF 来演示我的问题。
这里是使用鼠标移动事件的时候

这是什么时候不

我认为这是因为移动事件使事件处理负担过重,并且没有资源来运行单击事件。
我如何一起使用这两个事件?
编辑
按照建议,我在示例中附加了一些代码。
我有一个名为 的画布模型mapEditorModel。对我们来说重要的属性是mapEditorModel.MapObjects一个列表,其中包含需要绘制到画布上的元素。
该列表包含一个包装对象,它包含有关元素的大量信息,这对我们来说很重要,因为它包含用于绘制的预构建形状。
我有一个在画布上绘制元素的函数:
private void DrawElementOnCanvas(MapElementContainer item)
{
Rectangle shape = item.Shape;
CanvasElement.Children.Add(shape);
Canvas.SetLeft(shape, item.Position.X);
Canvas.SetTop(shape, item.Position.Y);
}
Run Code Online (Sandbox Code Playgroud)
我有一个updateCanvas()这样的方法:
private void updateCanvas()
{
CanvasElement.Children.RemoveRange(0, CanvasElement.Children.Count);
foreach (MapElementContainer item in mapEditorModel.MapObjects)
{
DrawElementOnCanvas(item);
}
//CollisionDetection();
}
Run Code Online (Sandbox Code Playgroud)
这两个事件方法是:
private void CanvasElement_MouseMove(object sender, MouseEventArgs e)
{
updateCanvas();
MapElementContainer mapObject = new MapElementContainer();
mapObject.Position = e.GetPosition((Canvas)sender);
mapObject.MapElement = new ContainerMapObject();
mapObject.CurrentRotateDegree = …Run Code Online (Sandbox Code Playgroud) javascript ×2
node.js ×2
api ×1
async-await ×1
azure ×1
browser ×1
c# ×1
canvas ×1
console ×1
encryption ×1
firebase ×1
http ×1
logging ×1
mailgun ×1
mouseevent ×1
nat ×1
performance ×1
phpstorm ×1
rest ×1
webstorm ×1
windows-10 ×1
wpf ×1