标签: es6-promise

Javascript ES6会答应支持'完成'api吗?

例如

p = new Promise(function (resolve, reject) {
    throw 'err';
});

p.done();
Run Code Online (Sandbox Code Playgroud)

在大多数promise polyfill库中,done将抛出一个错误,当前执行将退出.

但如果我们使用p.then(),什么都不会发生.承诺吞噬了这个错误.如果我们使用p.catch,我们无法退出当前执行.我希望实现以下目标:

try {
    // something
} catch (err) {
    if (check(err)) {
        throw err;
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript promise ecmascript-6 es6-promise

40
推荐指数
2
解决办法
6888
查看次数

承诺的身体什么时候被执行?

假设我有以下内容Promise:

function doSomethingAsynchronous() {
  return new Promise((resolve) => {
    const result = doSomeWork();

    setTimeout(() => {
      resolve(result);
   }), 100);
  });
}
Run Code Online (Sandbox Code Playgroud)

在什么时候被doSomeWork()称为?它Promise是在建造之后立即建造的吗?如果没有,是否还有一些我需要明确做的事情来确保Promise运行的主体?

javascript promise ecmascript-6 es6-promise

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

如何检查Promise是否有待处理

我有这种情况,我想知道一个承诺的状态.下面,该函数startsomeTest在它不再运行时调用(Promise未挂起).该start函数可以多次调用,但如果在测试仍在运行时调用它,它将不会等待并返回false

class RunTest {
    start() {
         retVal = false;

         if (!this.promise) {
             this.promise = this.someTest();
             retVal = true;                
         }

         if ( /* if promise is resolved/rejected or not pending */ ) {
             this.promise = this.someTest();
             retVal = true;
         }

         return retVal;
    }

    someTest() {
        return new Promise((resolve, reject) => {
            // some tests go inhere
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我找不到简单检查承诺状态的方法.喜欢的东西this.promise.isPending会很好:)任何帮助将不胜感激!

javascript promise ecmascript-6 es6-promise

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

Karma,PhantomJS和es6 Promises

我正在编写一个使用新的es6 promises的JavaScript库.我可以在Firefox中测试库,因为已经定义了promises.但是,当我尝试使用Karma和PhantomJS测试我的代码时,我收到错误Can't find variable: Promise..我猜这是因为PhantomJS浏览器还不支持es6承诺.

如何配置Karma为承诺引入polyfill?

javascript phantomjs karma-runner karma-mocha es6-promise

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

JavaScript中的observable和promise之间有什么区别?

所以我读过,在一些即将推出的JavaScript MVC中,observable正在寻求超越承诺:

观察与承诺之间有什么区别?

更新:道歉!删除了我的虚假陈述.

javascript promise es6-promise

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

如何使用TypeScript返回正确的Promise

所以我正在用打字稿学习Angular 2.

我正在努力编写一个模拟服务,我相信如果服务成功获取对象,则应返回Promise,如果发生任何事情则返回错误.

我尝试过以下代码,但看起来它不是打字稿的写法语法.

更新了CODE:

saveMyClass(updatedMyClass: MyClass){
        //saving MyClass using http service
        //return the saved MyClass or error
        var savedMyClass : MyClass = someLogicThatReturnsTheSavedObject(updatedMyClass);
        if(isSomeCondition)
            return Promise.reject(new Error('No reason but to reject'));
        else
            return new Promise<MyClass>(resolve => {setTimeout( ()=>resolve(savedMyClass),1500  )}  );
    }
Run Code Online (Sandbox Code Playgroud)

但令我惊讶的是,打字稿抱怨"返回表达式中没有最常见的类型".

什么应该是正确的代码?因此,如果返回正确的MyClass,我可以使用我的组件来消费,如果服务中存在任何MyClass则反映错误.

谢谢

typescript es6-promise angular

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

是否有返回ES6承诺的setTimeout版本?

这个问题类似,但我并没有询问承诺如何起作用,我特别想知道:

在返回Promise的东西中包装setTimeout的标准/最佳方法是什么?我在想像Angular的功能,但不是Angular特有的.$timeout

javascript promise ecmascript-6 es6-promise

35
推荐指数
1
解决办法
2万
查看次数

Promise reject()导致"Uncaught(in promise)"​​警告

reject()调用promise 回调后,Chrome控制台中会显示警告消息"Uncaught(in promise)".我不能围绕它背后的原因,也不知道如何摆脱它.

var p = new Promise((resolve, reject) => {
  setTimeout(() => {
    var isItFulfilled = false
    isItFulfilled ? resolve('!Resolved') : reject('!Rejected')
  }, 1000)  
})

p.then(result => console.log(result))
p.catch(error => console.log(error))
Run Code Online (Sandbox Code Playgroud)

警告:

在此输入图像描述

编辑:

我发现如果onRejected没有向.then(onResolved, onRejected)方法显式提供处理程序,JS将自动提供隐式处理程序.它看起来像这样:(err) => throw err.自动生成的处理程序将依次抛出.

参考:

如果IsCallable(onRejected)`为false,那么
     让onRejected为" Thrower ".

http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen

javascript catch-block promise es6-promise

35
推荐指数
1
解决办法
2万
查看次数

为什么Promise构造函数需要一个在完成时调用'resolve'的函数,但'then'却没有 - 它返回一个值而不是?

当我开始研究Promises时,我的理解已经停止在我未发现的下面的问题上(我发现所有这些都是对Promise构造函数的具体讨论,以及Promise' then'函数 - 但不是一个比较它们的设计模式的讨论).


1. Promise构造函数

从MDN文档中,我们使用了Promise构造函数(添加了我的注释):

new Promise(function(resolve, reject) { ... }); // <-- Call this Stage 1
Run Code Online (Sandbox Code Playgroud)

带有两个参数的函数对象resolvereject.第一个参数履行承诺,第二个参数拒绝承诺.一旦我们的操作完成,我们可以调用这些函数.


2. then功能

移动到then功能,可以在一个被称为Promise对象(返回一个新的Promise对象),我们有由文档中描述的以下函数签名(加上我的意见):

p.then(onFulfilled, onRejected);
Run Code Online (Sandbox Code Playgroud)

链接

因为该then方法返回Promise,所以您可以轻松地链接然后调用.

var p2 = new Promise(function(resolve, reject) {
  resolve(1); // <-- Stage 1 again
});

p2.then(function(value) {
  console.log(value); // 1
  return value + 1; // <-- Call …
Run Code Online (Sandbox Code Playgroud)

javascript promise ecmascript-6 es6-promise

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

Promise.resolve().然后vs setImmediate vs nextTick

NodeJS 0.11以及io.js和Node 0.12分支都附带本机承诺.

本机承诺有一个.then总是在未来事件循环周期上执行方法.

到目前为止setImmediate,自从我从nextTick切换以来,我一直在使用事件循环到事件循环的下一次迭代:

setImmediate(deferThisToNextTick); // My NodeJS 0.10 code
process.nextTick(deferThisToNextTick); // My NodeJS 0.8 code
Run Code Online (Sandbox Code Playgroud)

因为我们现在有了一种新方法:

Promise.resolve().then(deferThisToNextTick); 
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个?此外 - 对于在事件循环之前或之后运行的代码,它的Promise.resolve.then作用是什么setImmediate样的nextTick

javascript node.js promise es6-promise

31
推荐指数
2
解决办法
8472
查看次数