Bluebird提供了一种"终极"方法,可以在您的保证链中发生任何事情.我发现它非常方便用于清洁目的(比如解锁资源,隐藏装载机......)
在ES6原生承诺中是否有相同的东西?
以下是Finally方法的文档参考:
http://bluebirdjs.com/docs/api/finally.html
谢谢
我的问题最好通过这个jsfiddle,其代码如下:
var a = 1, b = 'x', c = true;
var d = {a: a, b: b, c: c}; // <--- object literal
var e = [a, b, c]; // <--- array
var f = {a, b, c}; // <--- what exactly is this??
// these all give the same output:
alert(d.a + ', ' + d.b + ', ' + d.c );
alert(e[0] + ', ' + e[1] + ', ' + e[2]);
alert(f.a + ', …Run Code Online (Sandbox Code Playgroud) 例如
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) 我对目前关于将async函数和关键字添加await到下一个EcmaScript的讨论感到困惑.
我不明白为什么有必要在async关键字之前使用function关键字.
从我的观点来看,await关键字等待发电机或承诺的结果做一个函数的return应该是足够的.
await应该在普通函数和生成器函数中简单可用,无需额外的async标记.
如果我需要创建一个函数作为结果应该可用await,我只需使用一个promise.
我的理由是这个很好的解释,下面的例子来自:
async function setupNewUser(name) {
var invitations,
newUser = await createUser(name),
friends = await getFacebookFriends(name);
if (friends) {
invitations = await inviteFacebookFriends(friends);
}
// some more logic
}
Run Code Online (Sandbox Code Playgroud)
它也可以作为普通函数完成,如果函数的执行将等待完成孔函数,直到满足所有等待.
function setupNewUser(name) {
var invitations,
newUser = await createUser(name),
friends = await getFacebookFriends(name);
if (friends) {
invitations = await inviteFacebookFriends(friends);
}
// return because createUser() and getFacebookFriends() …Run Code Online (Sandbox Code Playgroud) 我有以下内容:
getUser("foo").then(handleSuccess, handleError).always(tidyUp);
Run Code Online (Sandbox Code Playgroud)
getUser 返回一个jQuery Deferred对象.
我从这篇文章中了解到我可以将Deferred对象转换为本机Promise Promise.resolve,所以我可以写
Promise.resolve(getUser("foo"))
.then(handleSuccess)
.catch(handleError)
Run Code Online (Sandbox Code Playgroud)
虽然Promise API没有提供always方法,所以我想知道应该如何处理它.
是这样的吗?
Promise.resolve(getUser("foo"))
.then(handleSuccess)
.then(tidyUp)
.catch(handleError)
.then(tidyUp)
Run Code Online (Sandbox Code Playgroud) 使用Promises设计模式,是否可以实现以下功能:
var a, promise
if promise.resolve
a = promise.responsevalue;
if promise.reject
a = "failed"
AFTER resolution/rejection. Not ASYNC!!
send a somewhere, but not asynchronously. //Not a promise
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是类似finally的try - catch情况.
PS:我在NodeJS上使用ES6 Promise polyfill
我正在使用axios库并使用then(),catch()和finally().在Chrome中完美运行.但是finally()方法在MS Edge中不起作用.我研究过使用polyfills或垫片,我迷路了.我没有使用webpack或转换,也不打算添加它们.我需要保持这个简单.如何添加polyfill以确保finally()在Edge中有效?谢谢!
finally如果我babel-polyfill在React-Redux堆栈中构建的项目中使用时如何启用方法支持
是否有标准或延长承诺的功能,如新兴的标准.all(),.finally(),.catch(),.spread(),.settle(),等...
我知道Promises A +规范,但这似乎只是处理,.then()我找不到所有其他有用功能的标准.我熟悉jQuery,Q和Bluebird,并且所有这些之间存在明显的差异,这似乎应该是一个临时条件,因为一切都应该随着时间的推移而收敛到标准,因为实际上没有理由为类似的功能部分使用不同的名称.我知道jQuery甚至没有完全承诺A +兼容,但显然它是一个明确的目标,至少转向那个,但是所有其他有用的功能呢?
我想要了解当前和未来标准开发的样子的动机是知道各种库中提供的当前功能更可能与未来标准一致,哪些不是这样我可以编写需要较少维护的代码这个领域在未来.我已经做了很多搜索,但似乎很难找到(对我而言).我可以Promise.all()在ES6草案中看到,但没有看到任何其他的.
是否有提出了先进的诺言功能,如标准.all(),.finally(),.catch(),.spread()和.settle()?
javascript ×9
promise ×6
ecmascript-6 ×3
es6-promise ×2
async-await ×1
asynchronous ×1
babel ×1
bluebird ×1
chain ×1
finally ×1
jquery ×1
polyfills ×1