小编The*_*tor的帖子

如何在Visual Studio Intellisense中记录JavaScript配置对象

我一直在使用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作为三个独立的顶级参数.

do_it()注册三个独立的参数

更糟糕的是,方法体内的自动完成功能也无法识别参数,更不用说它们的类型了:

尝试访问config.name的方法会产生黄色三角形,没有帮助.

在Visual Studio中看起来更接近的唯一解决方案是使用适当的文档(@constructor@property标记)编写永不调用的构造函数,这使我编写了大量死代码并且还违反了JavaScript的无类思维(这是我首先使用配置对象的原因).它甚至不让我写配置对象!

不仅如此,我也知道Visual Studio不需要它.举例来说,当我写了一个调用这个库函数,它能够收集到的参数对象需要的属性叫id,sourcetarget,当我创建了一个对象字面函数的参数建议那些名字-并没有一个单一的线文件.据推测,它来自于使用它们的简单事实:

Visual Studio自动提取这三个属性,根本没有文档注释

当然,如果这些属性不在对象上并且类型不正确,那么该方法会抛出异常,但仍然如此. 编辑:我最近能够使用对象文字参数在我自己的代码中复制效果 - 我用一个明确定义的对象调用了一个函数,当我在代码中的其他位置再次调用该函数时,它给了我智能感知建议.但我仍然没有函数体内的类型信息或语义访问.

Visual Studio显然理解配置对象的概念,并且正在做一些提供建议属性的逻辑.那算法是什么?如何在不破坏我的代码的情况下利用它?

javascript documentation javascript-intellisense jsdoc visual-studio-2015

13
推荐指数
1
解决办法
1436
查看次数

在 Webpack 导出的库中使用动态导入

我正在通过 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 生成库包时,它正确地分割ComponentCheapComponentExpensive单独的块,正确放置在库文件中,但生成代码来加载这些块,就好像它们位于应用程序的根目录上一样:

var ComponentCheap …
Run Code Online (Sandbox Code Playgroud)

dynamic-import webpack

11
推荐指数
0
解决办法
1075
查看次数

Windows 10移动UWP应用程序与McgInterop.McgHelpers.ThrowFailed不可重现的崩溃

我们的崩溃报告显示我们的一个应用程序崩溃,我们无法重现.

堆栈跟踪如下:

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.

你们中有些人已经有这样的问题或任何线索来帮助我们吗?

非常感谢任何建议.

.net c# uwp

8
推荐指数
0
解决办法
458
查看次数

System.Runtime.CompilerServices.AsyncTaskMethodBuilder::Start 有大量的自我时间

我正在分析我们的 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)

c# profiling async-await

8
推荐指数
2
解决办法
8377
查看次数

USB轮询机制

为什么USB使用轮询机制而不是中断来检测设备?

我已经在Stack Overflow上看到了这个事件

  1. 同步(即你知道什么时候可以在一个小窗口内看到它)
  2. 不紧急(即缓慢的轮询间隔没有不良影响),和
  3. 经常(即你的大多数投票周期创造'命中')

然后我们可以使用民意调查.但是在USB的情况下,设备检测不常见,因此中断机制会更好.

谢谢你的回复,

查希尔

usb polling

7
推荐指数
1
解决办法
8507
查看次数

Edge不会在svg中正确处理缩放和text-anchor:middle

我正在使用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)

svg d3.js microsoft-edge

7
推荐指数
1
解决办法
918
查看次数

在VS Intellisense的JSDoc typedef中记录数组

在我的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)

javascript getjson javascript-intellisense

6
推荐指数
1
解决办法
2810
查看次数

我可以采用两个.NET代码覆盖率结果的差异吗?

我有一组.NET代码库的旧集成测试,我正在删除,但我知道,当我这样做时,将会有一些程序功能也将不再被测试.我有兴趣获得这些功能的列表.

一种看似自然的方法是在这些集成测试的代码覆盖率和官方单元的代码覆盖率以及我们保留的集成测试之间采用集合差异(P \ Q),换句话说,某些内容将显示为已合并当且仅当它被集成测试覆盖而不是官方测试时才会产生结果.举例来说,如果集成测试覆盖的方法A(),B()以及C()和正式测试覆盖A(),B()D(),然后最终报告应仅显示C()为覆盖.有没有办法在.NET测试中采用这种设置差异?

我可以访问Visual Studio的测试运行器以及JetBrains dotCover,并且可以为两者生成代码覆盖测试.我找到了如何使用两个测试框架进行逻辑OR合并操作的文档,但没有其他操作,包括设置差异.我可以通过能够获取单个report(P \ Q = ~(~P | Q))的逻辑NOT来获得它,尽管这样的结果本身没有意义,所以我理解为什么不为它提供功能.

是的,我知道理论上的"最佳解决方案"是为每个未经测试的功能编写单元测试,但我不仅要首先关注新发现的缺陷,我还可以通过简单地删除来回应新发现的功能它们,因为集成测试代表了已被取消的项目的需求.

.net unit-testing code-coverage

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

React.js 告诉你取消承诺。官方承诺不能取消。我该怎么办?

为了防止对未挂载的 React 组件进行幻像更新,React 会告诉您取消任何挂起的承诺组件上的(例如获取额外数据的承诺)。使用 Bluebird 承诺很容易实现这一点,它有一个.cancel()方法可以导致.then().catch()处理程序从不响应。

但是,ES6 Promises 不支持取消。此外,ES7asyncawait仅使用原生 Promise,不支持任何插入式替换(例如 Bluebird)。这意味着,如果你希望能够取消在承诺作出反应,因为他们告诉你这样做,你必须使用.then().catch(),也有放置一个中间人在本地无极方法,比如fetch(),以便它可以被取消。

这真的是 React 所期望的吗?

javascript cancellation reactjs es6-promise

6
推荐指数
1
解决办法
316
查看次数

在 Amazon Cloudwatch Insights 中,如何获取统计数据的统计数据?

我正在使用 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 中进行多层统计查询,因此无法获取统计数据的统计数据。有没有解决的办法?

amazon-cloudwatch aws-cloudwatch-log-insights

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