小编Ber*_*rgi的帖子

承诺 - 是否有可能强制取消承诺

我使用ES6 Promises来管理我的所有网络数据检索,在某些情况下我需要强制取消它们.

基本上这种情况是我在UI上有一个提前输入搜索,其中请求被委托给后端必须基于部分输入执行搜索.虽然此网络请求(#1)可能需要一点时间,但用户会继续键入哪个最终会触发另一个后端调用(#2)

这里#2自然优先于#1,所以我想取消Promise包装请求#1.我已经拥有数据层中所有Promise的缓存,因此我理论上可以检索它,因为我试图提交#2的Promise.

但是一旦从缓存中检索Promise,我该如何取消Promise#1?

有人可以建议一种方法吗?

javascript promise cancellation

68
推荐指数
4
解决办法
3万
查看次数

Chrome/Firefox console.log始终附加一行未定义的行

每次console.log执行时,都会undefined在输出日志中附加一行说明.

适用于Windows和Linux上的Firefox和Chrome.

javascript debugging console logging

66
推荐指数
4
解决办法
4万
查看次数

当一些调用工作而其他调用失败时,$ q.all()会发生什么?

当一些调用工作而其他调用失败时,$ q.all()会发生什么?

我有以下代码:

    var entityIdColumn = $scope.entityType.toLowerCase() + 'Id';
    var requests = $scope.grid.data
      .filter(function (rowData, i) {
          return !angular.equals(rowData, $scope.grid.backup[i]);
      })
      .map(function (rowData, i) {
          var entityId = rowData[entityIdColumn];
          return $http.put('/api/' + $scope.entityType + '/' + entityId, rowData);
      });
    $q.all(requests).then(function (allResponses) {
        //if all the requests succeeded, this will be called, and $q.all will get an
        //array of all their responses.
        console.log(allResponses[0].data);
    }, function (error) {
        //This will be called if $q.all finds any of the requests erroring.
        var abc …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angular-promise

64
推荐指数
4
解决办法
4万
查看次数

Visual Studio 2015 JSX/ES2015语法高亮显示

如何在Visual Studio 2015 for JSX中使用ES2015代码获得正确的语法突出显示?

ES2015代码

如果我删除importexport关键字,它工作正常: 没有进口/出口

我刚刚更新到Visual Studio 2015 Enterprise Update 1,但它仍然保持不变.

intellisense ecmascript-6 react-jsx visual-studio-2015

64
推荐指数
4
解决办法
3万
查看次数

如何在本地存储(或其他地方)中保留ES6地图?

var a = new Map([[ 'a', 1 ]]);
a.get('a') // 1

var forStorageSomewhere = JSON.stringify(a);
// Store, in my case, in localStorage.

// Later:
var a = JSON.parse(forStorageSomewhere);
a.get('a') // TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)

不幸的是JSON.stringify(a);简单地返回'{}',这意味着当恢复时它变成一个空对象.

我发现es6-mapify允许在Map和普通对象之间进行向上/向下转换,因此这可能是一个解决方案,但我希望我只需依靠外部依赖来持久保存我的地图.

javascript json dictionary ecmascript-6

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

分配中的Javascript AND运算符

我知道在JavaScript中你可以这样做:

var oneOrTheOther = someOtherVar || "these are not the droids you are looking for...";
Run Code Online (Sandbox Code Playgroud)

其中变量oneOrTheOther将在第一表达式的值,如果它不是null,undefinedfalse.在这种情况下,它被分配给第二个语句的值.

但是,oneOrTheOther当我们使用逻辑AND运算符时,变量会分配给什么?

var oneOrTheOther = someOtherVar && "some string";
Run Code Online (Sandbox Code Playgroud)

什么时候会发生someOtherVar非假的?假的
时候会发生什么someOtherVar

只是学习JavaScript,我很好奇与AND运算符一起分配会发生什么.

javascript variable-assignment logical-operators and-operator

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

在Sublime Text 3中,如何为JSX文件启用Emmet?

我以前一直在使用Allan Hortle的JSX软件包,直到我遇到了处理语法高亮的问题.然后我注意到有一个官方包,崇高反应.

通过Allan Hortle的软件包,他在Preferences > Key Bindings – User启用Emmet功能中包含了一个片段,如下所示:

{
    "keys": ["tab"],
    "command": "expand_abbreviation_by_tab", 
    "context": [
        {
            "operand": "source.js.jsx", 
            "operator": "equal", 
            "match_all": true, 
            "key": "selector"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

此代码段似乎不适用于官方的sublime-react包.这似乎是用键绑定修改的东西,但Sublime文档的初步细读并未对该主题产生任何影响.救命?

sublimetext3 emmet reactjs react-jsx

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

模板字符串作为对象属性名称

为什么JavaScript不允许模板字符串作为对象属性键?例如,当我输入:

foo = {`bar`: 'baz'}
Run Code Online (Sandbox Code Playgroud)

在NodeJS REPL中,它会抛出一个SyntaxError带有长堆栈跟踪的"Unexpected模板字符串".但是,属性值很好,这并不是意料之外的.在浏览器中发生类似的错误,例如,Firebug会抛出SyntaxError"无效的属性ID".

"计算属性名称"中允许使用模板字符串.例如,这在所有支持语法的浏览器中编译得非常好:

var foo = {
    [`bar` + 1]: `baz`
};
Run Code Online (Sandbox Code Playgroud)

并创建对象{"bar1": "baz"}.

为什么不允许模板字符串作为文字对象键?是出于性能原因吗?必须在运行时编译模板字符串(如果我错了,请纠正我),这意味着每次遇到此对象时,解释器都必须计算对象名称.考虑到"煮熟的"模板字符串之类的东西,这似乎可能会变慢,尽管我们从ES5开始就有吸气剂和固定器.Firefox没有提到这是一个错误,这就是我发现它意外的原因.将来某个时候会允许语法吗?

javascript object-literal node.js template-strings template-literals

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

ES6模块导入给出"Uncaught SyntaxError:Unexpected identifier"

对于个人项目,我正在尝试使用ES6导入来编写更清晰的代码.作为第一次测试,我正在编写一个应该生成菜单的对象.当我直接加载类时,整个代码正在工作,但是当在ES6中使用导入和导出时,它会import在行中产生"未捕获的SyntaxError:Unexpected identifier"错误main.js

我有以下文件:

资产/ JS/menu.module.js

'use strict';

export default class Menu
{ ... }
Run Code Online (Sandbox Code Playgroud)

资产/ JS/main.js

import Menu from "./menu.module.js";

window.addEventListener('DOMContentLoaded', () => {
    const menu = new Menu();
});
Run Code Online (Sandbox Code Playgroud)

的index.html

<script type="module" src="assets/js/menu.module.js"></script>
<script src="assets/js/main.js">
Run Code Online (Sandbox Code Playgroud)

请注意,这些只是相关的代码行.

使用<script type="module">或不使用线似乎对我没有任何影响.我确实启用了实验和ES6模块的chrome标志,因为没有它我收到一个关于import没有定义的错误.

Chrome版本为62,因此根据不同的来源(包括谷歌的更新日志本身),即使没有标志,这也应该有效.

任何人都可以告诉我为什么这不起作用,我做错了什么?

html javascript ecmascript-6 es6-modules

59
推荐指数
1
解决办法
8万
查看次数

为什么".catch(err => console.error(err))"气馁?

我正在使用promises并且代码如下所示:

function getStuff() { 
  return fetchStuff().then(stuff => 
    process(stuff)
  ).catch(err => {
    console.error(err);
  });
}
Run Code Online (Sandbox Code Playgroud)

要么:

async function getStuff() { 
  try {
    const stuff = await fetchStuff();
    return process(stuff);
  } catch (err) { 
    console.error(err);
  }
}
Run Code Online (Sandbox Code Playgroud)

我这样做是为了避免错过错误但是同事用户告诉我不应该这样做而且不赞成.

  • 怎么了return ….catch(err => console.error(err))
  • 我见过很多这样做的代码,为什么?
  • 我该怎么做呢?

javascript try-catch node.js promise

58
推荐指数
2
解决办法
7052
查看次数