我一直在使用Visual Studio的JavaScript Intellisense功能一段时间,并且大部分都对它为标准API提供建议的程度感到满意,但我发现我无法让Visual Studio了解配置对象(即具有多个可选项的单个对象)或者必需的属性作为函数的参数).
该官员JSDoc语法表明,如果一个参数,预计将有属性,您创建一个单独的@param
线为每使用点表示法:
/**
* @param {Object} config
* @param {String} config.name
* @param {Number} config.gold
*/
function do_it(config) { ... }
Run Code Online (Sandbox Code Playgroud)
但是,Visual Studio不承认这一点-它呈现config
,config.name
以及config.gold
作为三个独立的顶级参数.
更糟糕的是,方法体内的自动完成功能也无法识别参数,更不用说它们的类型了:
在Visual Studio中看起来更接近的唯一解决方案是使用适当的文档(@constructor
和@property
标记)编写永不调用的构造函数,这使我编写了大量死代码并且还违反了JavaScript的无类思维(这是我首先使用配置对象的原因).它甚至不让我写配置对象!
不仅如此,我也知道Visual Studio不需要它.举例来说,当我写了一个调用这个库函数,它能够收集到的参数对象需要的属性叫id
,source
和target
,当我创建了一个对象字面函数的参数建议那些名字-并没有一个单一的线文件.据推测,它来自于使用它们的简单事实:
当然,如果这些属性不在对象上并且类型不正确,那么该方法会抛出异常,但仍然如此.
编辑:我最近能够使用对象文字参数在我自己的代码中复制效果 - 我用一个明确定义的对象调用了一个函数,当我在代码中的其他位置再次调用该函数时,它给了我智能感知建议.但我仍然没有函数体内的类型信息或语义访问.
Visual Studio显然理解配置对象的概念,并且正在做一些提供建议属性的逻辑.那算法是什么?如何在不破坏我的代码的情况下利用它?
javascript documentation javascript-intellisense jsdoc visual-studio-2015
我正在通过 Webpack 将 React 组件导出为库。在该库中,我有几个React.lazy()
执行动态导入的调用:
库.tsx:
import React from 'react';
const ComponentCheap = React.lazy(() => import('./ComponentCheap/index');
const ComponentExpensive = React.lazy(() => import('./ComponentExpensive/expensive');
export default function LibComponent(props) {
return (<div>
<Suspense fallback="Loading...">
(props.useExpensive ? <ComponentExpensive /> : <ComponentCheap />)
</Suspense>
</div>)
}
Run Code Online (Sandbox Code Playgroud)
该库又被React.lazy()
加载到消费应用程序中:
应用程序.tsx:
import React from 'react';
import ReactDOM from 'react-dom';
const LibComponent = React.lazy(() => import('@mystuff/library'));
ReactDOM.render((
<Suspense fallback="Loading...">
<LibComponent />
</Suspense>
), document.body);
Run Code Online (Sandbox Code Playgroud)
问题是:当 webpack 生成库包时,它正确地分割ComponentCheap
成ComponentExpensive
单独的块,正确放置在库文件中,但生成代码来加载这些块,就好像它们位于应用程序的根目录上一样:
var ComponentCheap …
Run Code Online (Sandbox Code Playgroud) 我们的崩溃报告显示我们的一个应用程序崩溃,我们无法重现.
堆栈跟踪如下:
0x000000005e2b83fb McgInterop.McgHelpers.ThrowFailed(Int32 hr, RuntimeTypeHandle typeHnd) in c:\windows\ServiceProfiles\NetworkService\AppData\Local\Packages\appcompile-20160922-081319-21352\AC\Temp\Ilc1794386837\app-windows10.McgInterop\Helpers.g.cs at 6952:10
0x000000005e2b9855 McgInterop.ComCallHelpers.ComCall__HRESULT($__ComObject __this, RuntimeTypeHandle __typeHnd, Int32 __targetIndex) in c:\windows\ServiceProfiles\NetworkService\AppData\Local\Packages\appcompile-20160922-081319-21352\AC\Temp\Ilc1794386837\app-windows10.McgInterop\SharedStubs.g.cs at 6687:5
0x000000005e2b97a7 McgInterop.ForwardComSharedStubs.Proc_<System.__Canon>(Void* InstParam, $__ComObject __this, Int32 __targetIndex) in c:\windows\ServiceProfiles\NetworkService\AppData\Local\Packages\appcompile-20160922-081319-21352\AC\Temp\Ilc1794386837\app-windows10.McgInterop\SharedStubs.g.cs at 353:4
0x000000005e3d050b Microsoft.HockeyApp.Extensibility.Windows.UnhandledExceptionTelemetryModule.CoreApplication_UnhandledErrorDetected(Object sender, $UnhandledErrorDetectedEventArgs e) in at 0:0
Run Code Online (Sandbox Code Playgroud)
我们假设这种崩溃是在某些特定条件下在启动时发生的,但我们无法在自己的设备上重现它.我们也认为MCG
是,Marshalling Code Generator
但我们不能再进一步了.
这个应用程序是完全的W10 Uwp App
.
你们中有些人已经有这样的问题或任何线索来帮助我们吗?
非常感谢任何建议.
我正在分析我们的 C# .NET 应用程序,我注意到该方法System.Runtime.CompilerServices.AsyncTaskMethodBuilder::Start
多次出现,占用了我的 1 分钟示例中大约 3-4 秒的 Self Time(这意味着它花费了大约 3-4 秒)在任务基础结构中)。
我知道编译器使用此方法来实现C# 中的async
/await
语言构造。一般来说,里面有什么会导致它阻塞或以其他方式占用大量时间?有什么方法可以改进我们的方法,让它在这个基础设施上花费更少的时间?
编辑:这是一个有点冗长但仍然独立的代码示例来演示这个问题,本质上是对两个非常大的数组进行并行合并排序:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace AsyncAwaitSelfTimeTest
{
class Program
{
static void Main(string[] args)
{
Random random = new Random();
int[] arrayOne = GenerateArray(50_000_000, random.Next);
double[] arrayTwo = GenerateArray(50_000_000, random.NextDouble);
Comparer<int> comparerOne = Comparer<int>.Create((a, b) =>
{
if (a < b) return -1;
else if (a > b) return 1;
else return 0;
}); …
Run Code Online (Sandbox Code Playgroud) 为什么USB使用轮询机制而不是中断来检测设备?
我已经在Stack Overflow上看到了这个事件
然后我们可以使用民意调查.但是在USB的情况下,设备检测不常见,因此中断机制会更好.
谢谢你的回复,
查希尔
我正在使用D3编写图形显示程序,我发现Microsoft Edge无法正确处理边缘缩放的问题.我的代码如下:
HTML:
<svg id="container" width="200" height="200">
<g id="inner-container">
</g>
</svg>
Run Code Online (Sandbox Code Playgroud)
JS:
var container = d3.select("#container");
var innerContainer = container.select("g");
container.call(d3.behavior.zoom().scaleExtent([.5,4]).on("zoom", function(){
innerContainer.attr("transform", "translate(" + d3.event.translate + ") scale(" + d3.event.scale + ")");
}));
var nodes = innerContainer.append("g").selectAll(".graph-node");
var labels = innerContainer.append("g").selectAll(".graph-label");
var data = ["A", "B", "C", "D", "E"];
nodes.data(data).enter().call(function (selection){
selection = selection.append("g");
selection.attr("class", ".graph-node");
selection.attr("transform", function(d, i){
return ["translate(", (i * 20).toString(), " ", (i * 20).toString(), ")"].join("");
});
selection.append("rect")
.attr("width", 20)
.attr("height", 20)
.attr("rx", 2).attr("ry", 2) …
Run Code Online (Sandbox Code Playgroud) 在我的VS2015 JavaScript应用程序中,我有一个JSON对象,我从使用JSDoc @typedef
注释记录的REST API获得:
/**
* @typedef {Object} JSON_Response
* @property {Number} id
* @property {String} name
* @property {JSON_Response_Tag} tag
*/
/**
* @typedef {Object} JSON_Response_Tag
* @property {Number} id
* @property {String} color
*/
Run Code Online (Sandbox Code Playgroud)
当我在使用这些JSON对象的方法的JSDoc注释中引用此类型时,我可以很好地获得Intellisense文档:
/**
* @param {JSON_Response} response
*/
function process_response(response) {
// process response here...
}
Run Code Online (Sandbox Code Playgroud)
但是,我根本无法使用数组 - 当我尝试索引数组时,我得到了"黄色三角形"菜单,当VS无法为您获取Intellisense上下文时:
/**
* @typedef {Object} JSON_Response
* @property {Number} id
* @property {String} name
* @property {JSON_Response_Tag[]} tags
*/
/**
* @param {JSON_Response} response
*/
function …
Run Code Online (Sandbox Code Playgroud) 我有一组.NET代码库的旧集成测试,我正在删除,但我知道,当我这样做时,将会有一些程序功能也将不再被测试.我有兴趣获得这些功能的列表.
一种看似自然的方法是在这些集成测试的代码覆盖率和官方单元的代码覆盖率以及我们保留的集成测试之间采用集合差异(P \ Q
),换句话说,某些内容将显示为已合并当且仅当它被集成测试覆盖而不是官方测试时才会产生结果.举例来说,如果集成测试覆盖的方法A()
,B()
以及C()
和正式测试覆盖A()
,B()
和D()
,然后最终报告应仅显示C()
为覆盖.有没有办法在.NET测试中采用这种设置差异?
我可以访问Visual Studio的测试运行器以及JetBrains dotCover,并且可以为两者生成代码覆盖测试.我找到了如何使用两个测试框架进行逻辑OR合并操作的文档,但没有其他操作,包括设置差异.我可以通过能够获取单个report(P \ Q = ~(~P | Q)
)的逻辑NOT来获得它,尽管这样的结果本身没有意义,所以我理解为什么不为它提供功能.
是的,我知道理论上的"最佳解决方案"是为每个未经测试的功能编写单元测试,但我不仅要首先关注新发现的缺陷,我还可以通过简单地删除来回应新发现的功能它们,因为集成测试代表了已被取消的项目的需求.
为了防止对未挂载的 React 组件进行幻像更新,React 会告诉您取消任何挂起的承诺组件上的(例如获取额外数据的承诺)。使用 Bluebird 承诺很容易实现这一点,它有一个.cancel()
方法可以导致.then()
和.catch()
处理程序从不响应。
但是,ES6 Promises 不支持取消。此外,ES7async
和await
仅使用原生 Promise,不支持任何插入式替换(例如 Bluebird)。这意味着,如果你希望能够取消在承诺作出反应,因为他们告诉你这样做,你必须使用.then()
和.catch()
,也有放置一个中间人在本地无极方法,比如fetch()
,以便它可以被取消。
这真的是 React 所期望的吗?
我正在使用 AWS Cloudwatch Insights 并运行如下查询:
fields @message, @timestamp
| filter strcontains(@message, "Something of interest happened")
| stats count() as interestCount by bin(10m) as tenMinuteTime
| stats max(interestCount) by datefloor(tenMinuteTime, 1d)
Run Code Online (Sandbox Code Playgroud)
但是,在最后一行,我收到以下错误:
mismatched input 'stats' expecting {K_PARSE, K_SEARCH, K_FIELDS, K_DISPLAY, K_FILTER, K_SORT, K_ORDER, K_HEAD, K_LIMIT, K_TAIL}
Run Code Online (Sandbox Code Playgroud)
这似乎意味着我无法在 Insights 中进行多层统计查询,因此无法获取统计数据的统计数据。有没有解决的办法?
javascript ×3
.net ×2
c# ×2
async-await ×1
aws-cloudwatch-log-insights ×1
cancellation ×1
d3.js ×1
es6-promise ×1
getjson ×1
jsdoc ×1
polling ×1
profiling ×1
reactjs ×1
svg ×1
unit-testing ×1
usb ×1
uwp ×1
webpack ×1