小编Jes*_*sse的帖子

Bluebird.js:重新抛出catch回调中的错误不再被捕获

我想知道为什么在这个例子中永远不会调用外部catch回调:

var returnPromise = function () {
  return new Promise(function (resolve, reject) {
      resolve('promise return value');
  })
};
returnPromise().then(function () {
    returnPromise().then(function() {
        throw new Error('hello');
    }).catch(function (err) {
        console.log('got inner error', err);
        return Promise.reject(err);
        //throw err;
    });
}).catch(function (err) {
  console.log('got outer error', err);
});
Run Code Online (Sandbox Code Playgroud)

我试图再次抛出catch错误并返回一个被拒绝的Promise,但在这两种情况下都不会调用外部回调.

谁能告诉我为什么?

使用bluebird.js 3.0.2的实例:http://codepen.io/jjd/pen/wMqEpR?edit = 001

编辑:我忘了在第7行返回returnPromise(),这就是代码无法按预期工作的原因.

javascript error-handling promise bluebird

3
推荐指数
1
解决办法
3336
查看次数

无法阻止Mac上最新Chrome版本(59)中的导航手势

无法完全禁用双指轻扫手势来浏览整个网站的浏览器历史记录对我来说是一个持续的烦恼.到目前为止,至少可以通过在mousewheel事件上调用preventDefault()来防止这种行为.

这在Chrome 59中似乎不再起作用了.

以下是如何重现它:

  1. 在页面上的某个位置启动手势,然后取消它
  2. 从那以后,preventDefault没有任何效果.

有人有解决方案吗?

例子

当您在表视图中滚动时,Zenkit和Airtable都会调用preventDefault.它似乎首先工作,但一旦手势被识别,然后至少取消一次(在表格外,防止默认不被调用),防止手势不再起作用(甚至在表格内).因此,从那里开始,向桌面左侧滚动几乎是不可能的,因为它总是触发手势.

在Trello的看板视图中,只有当您位于卷轴的左边缘或右边缘时才会出现.但我想这是因为他们使用原生滚动而Zenkit和Airtable使用css翻译.

一旦用户开始滚动并在之后删除它,我尝试在内容的顶部创建一个不可见的滚动容器.这显着减少了问题,但并不适用于所有情况.

示例代码:https: //codepen.io/anon/pen/gRKaMX

这支笔有3个盒子.

  • 第一个使用overflow:scroll滚动本地.这里只有scrollLeft为0才能触发手势.

  • 第二个附加了一个事件监听器,它在每个mousewheel事件上调用preventDefault.这会首先阻止手势,但一旦您在页面上的任何其他位置启动它,它就不再起作用了.

  • 最后还有第三个div,你可以随时启动手势.

StackOverflow也希望我内联代码,所以这里是:

HTML:

 Native Scrolling:
<div id="native-scrolling" class="box">
  <div></div>
 </div>

Prevent gesture by calling prevent default. Only works if you didn't start the gesture anywhere else, yet:
<div id="prevent-gesture" class="box"></div>

Just a normal div:
<div class="box"></div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

$('#prevent-gesture').on('mousewheel', function (event) {
  event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

CSS:

.box {
  height: 100px;
  width: 200px;
  background: black;
}

#native-scrolling {
  overflow: scroll;
}

#native-scrolling > …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome gesture preventdefault macos-sierra

3
推荐指数
1
解决办法
632
查看次数