相关疑难解决方法(0)

等待多个并发等待操作

如何更改以下代码,以便触发异步操作并同时运行?

const value1 = await getValue1Async();
const value2 = await getValue2Async();
// use both values
Run Code Online (Sandbox Code Playgroud)

我需要做这样的事情吗?

const p1 = getValue1Async();
const p2 = getValue2Async();
const value1 = await p1;
const value2 = await p2;
// use both values
Run Code Online (Sandbox Code Playgroud)

javascript promise async-await es2017

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

收集多个承诺结果?(普通javascript)

我是Promises的新手,它尝试首先从localstorage加载很多结果,如果失败,请回过头从服务器获取数据。我不想使用jquery-忽略我当前正在使用$ .getJSON:-/

function loader1() {
    return new Promise(function (resolve, reject) {
        localforage.getItem("data1").then(function (value) {
            if (value !== null) {
                resolve(value);
            } else {
                $.getJSON("/myapp/data1.json").then(function (data) {
                    if (data !== null) {
                        resolve(data);
                    }
                }).catch(function (err) {
                    reject(err);
                });
            }
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

一个文件就可以了。所以我会

loader1().then(function(result) { 
    // we have a result
    doSomethingElse();
}).catch(function (err) {
    // problem
});
Run Code Online (Sandbox Code Playgroud)

但是我想对多个文件执行此操作,其中一些文件位于本地存储中,而另一些文件则从远程源加载json。我想加载所有内容,并在完成后执行我的应用程序的下一步。

Promise.all看起来是这样,但是我看不到如何获得每个加载程序的结果;我以为会是这样的:

Promise
    .all([loader1, loader2, loader3])
    .then(function(result1,result2,result3)) {
        ...
Run Code Online (Sandbox Code Playgroud)

但这不是它的工作原理...所以我尝试了

Promise
    .all([loader1, loader2, loader3])
    .then(function(result)) {
        // var result1 = result[0];
        // …
Run Code Online (Sandbox Code Playgroud)

javascript es6-promise

5
推荐指数
2
解决办法
5433
查看次数

将 Fetch API 与 Promise.all 结合使用

我的目标是从两个 URL 获取数据,并仅在两个 URL 均成功返回时才执行操作。另一方面,如果其中任何一个失败,我想返回错误。我已经尝试了我的代码并设法获得了预期的效果。

我的问题是,是否有更有效、更简洁的方法来实现相同的功能?

辅助函数

let status = (r) => {  
  if (r.ok) {  
    return Promise.resolve(r)  
  } else {  
    return Promise.reject(new Error(r.statusText))  
  }  
}

let json = (r) => r.json();
Run Code Online (Sandbox Code Playgroud)

要求

let urls = [
    'http://localhost:3000/incomplete',
    'http://localhost:3000/complete'
]

let promises = urls.map(url => {

    return fetch(url)  
    .then(status)  
    .then(json)  
    .then(d => Promise.resolve(d))
    .catch(e => Promise.reject(new Error(e)));

});

Promise.all(promises).then(d => {
    // do stuff with d
}).catch(e => {
    console.log('Whoops something went wrong!', e);
});
Run Code Online (Sandbox Code Playgroud)

javascript ajax ecmascript-6 es6-promise fetch-api

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