Questions tagged «promise»

承诺是延迟计算的一种策略,适用于多种并发样式:用于本地计算的线程和事件循环并发,以及同步和异步远程消息传递。一个promise表示异步操作的最终结果。处理承诺的主要方式是通过注册从承诺的最终值或失败原因到新承诺的转换的方法。


20
在forEach循环中使用异步/等待
在循环中使用async/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。awaitforEachawait import fs from 'fs-promise' async function printFiles () { const files = await getFilePaths() // Assume this works fine files.forEach(async (file) => { const contents = await fs.readFile(file, 'utf8') console.log(contents) }) } printFiles() 这段代码确实有效,但是这可能出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用async/ await,所以我只是想问一下这是否有问题。

19
如何将现有的回调API转换为Promise?
我想使用Promise,但我有以下格式的回调API: 1. DOM加载或其他一次事件: window.onload; // set to callback ... window.onload = function() { }; 2.普通回调: function request(onChangeHandler) { ... } request(function() { // change happened ... }); 3.节点样式回调(“ nodeback”): function getStuff(dat, callback) { ... } getStuff("dataParam", function(err, data) { ... }) 4.带有节点样式回调的整个库: API; API.one(function(err, data) { API.two(function(err, data2) { API.three(function(err, …

17
如何访问.then()链中的先前的诺言结果?
我已经将我的代码重组为promises,并构建了一个美好的长而平坦的promise链,其中包括多个.then()回调。最后,我想返回一些复合值,并且需要访问多个中间promise结果。但是,序列中间的分辨率值不在上一个回调的范围内,如何访问它们? function getExample() { return promiseA(…).then(function(resultA) { // Some processing return promiseB(…); }).then(function(resultB) { // More processing return // How do I gain access to resultA here? }); }

2
什么是显式的Promise构建反模式,如何避免呢?
我正在编写代码,执行以下操作: function getStuffDone(param) { | function getStuffDone(param) { var d = Q.defer(); /* or $q.defer */ | return new Promise(function(resolve, reject) { // or = new $.Deferred() etc. | // using a promise constructor myPromiseFn(param+1) | myPromiseFn(param+1) .then(function(val) { /* or .done */ | .then(function(val) { d.resolve(val); | resolve(val); }).catch(function(err) …


10
jQuery的延迟和承诺-.then()与.done()
我一直在阅读有关jQuery延迟和承诺的信息,但看不到使用.then()&.done()进行成功回调之间的区别。我知道Eric Hynds提到.done()并.success()映射到相同的功能,但是我猜是这样,.then()因为所有的回调都在成功完成操作后被调用。 有人可以启发我正确使用吗?

10
不只承诺回调吗?
我已经开发JavaScript几年了,我完全不了解关于promise的麻烦。 看来我所做的就是改变: api(function(result){ api2(function(result2){ api3(function(result3){ // do work }); }); }); 无论如何我都可以使用像async这样的库,它有类似以下内容: api().then(function(result){ api2().then(function(result2){ api3().then(function(result3){ // do work }); }); }); 这是更多的代码和更少的可读性。我在这里什么都没得到,也不是突然变得神奇地“平坦”。更不用说必须将事情变成诺言。 那么,这里的诺言有什么大惊小怪的呢?

18
等到所有诺言都完成,即使有些诺言被拒绝
假设我有一组Promise正在发出网络请求的,其中一个会失败: // http://does-not-exist will throw a TypeError var arr = [ fetch('index.html'), fetch('http://does-not-exist') ] Promise.all(arr) .then(res => console.log('success', res)) .catch(err => console.log('error', err)) // This is executed 假设我要等到所有这些完成为止,无论是否失败。我可能无法使用的资源可能会出现网络错误,但是如果可以得到,我会在继续之前希望这样做。我想优雅地处理网络故障。 既然Promises.all没有任何余地,那么在不使用Promise库的情况下,推荐的处理方式是什么?

5
JavaScript承诺-拒绝与抛出
我已经阅读了几篇有关该主题的文章,但是我仍然不清楚Promise.reject与抛出错误之间是否存在区别。例如, 使用Promise.reject return asyncIsPermitted() .then(function(result) { if (result === true) { return true; } else { return Promise.reject(new PermissionDenied()); } }); 使用抛出 return asyncIsPermitted() .then(function(result) { if (result === true) { return true; } else { throw new PermissionDenied(); } }); 我倾向于仅使用throw它,因为它更短,但我想知道一个相对于另一个是否有任何优势。

9
什么是std :: promise?
我相当熟悉C ++ 11分的std::thread,std::async和std::future部件(例如见这个答案),这是直接的。 但是,我不太了解std::promise它的用途,作用以及在什么情况下最好使用它。标准文档本身不包含除类概述之外的大量信息,而且::: thread也不包含。 有人可以举一个简短,简洁的例子来说明这种情况的std::promise需要,它是最惯用的解决方案?


5
从then()返回值或Promise.resolve有什么区别
之间有什么区别? new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return "bbb"; }) .then(function(result) { console.log(result); }); 运行代码段隐藏结果展开摘要 和这个: new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return Promise.resolve("bbb"); }) .then(function(result) { console.log(result); }); 运行代码段隐藏结果展开摘要 我问,因为我得到了不同的行为使用Angular和$ http服务与链接.then()。因此,代码太多了,因此首先是上面的示例。


20
在功能范围之外解决Javascript Promise
我一直在使用ES6 Promise。 通常,Promise是这样构造和使用的 new Promise(function(resolve, reject){ if (someCondition){ resolve(); } else { reject(); } }); 但是为了灵活性起见,我一直在做以下类似的事情来解决问题。 var outsideResolve; var outsideReject; new Promise(function(resolve, reject) { outsideResolve = resolve; outsideReject = reject; }); 然后 onClick = function(){ outsideResolve(); } 这可以正常工作,但是有更简单的方法吗?如果不是,这是个好习惯吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.