Javascript 在返回数据之前等待异步函数完成的最佳方法

Javascript 在返回数据之前等待异步函数完成的最佳方法,javascript,arrays,asynchronous,request,promise,Javascript,Arrays,Asynchronous,Request,Promise,在返回数据之前,等待所有并行异步函数完成的最佳方式是什么 请求异步工作,下面的函数将返回一个空数组 从“请求”导入请求 //URL列表 常量URL=[ 'http://someurl.com/1.json', 'http://someurl.com/2.json', 'http://someurl.com/3.json', ] 函数getData(){ //将包含数据的数组 让结果=[] //从所有URL请求数据 forEach(i=>{ //函数异步工作 请求(i,(err,res,body

在返回数据之前,等待所有并行异步函数完成的最佳方式是什么

请求异步工作,下面的函数将返回一个空数组

从“请求”导入请求
//URL列表
常量URL=[
'http://someurl.com/1.json',
'http://someurl.com/2.json',
'http://someurl.com/3.json',
]
函数getData(){
//将包含数据的数组
让结果=[]
//从所有URL请求数据
forEach(i=>{
//函数异步工作
请求(i,(err,res,body)=>{
如果(错误)抛出错误
const data=JSON.parse(正文)
结果。推送(i.someValue)
})
})
返回结果//返回一个空数组:(

}
如果你能使用承诺,最好的方法就是使用它们。 确保您的请求函数返回一个承诺,这样您就可以执行如下操作:

var request = function request( url ) {
    return new Promise(function requestPromise( resolve, reject ) {
        myAjaxCallOrOtherAsyncCall( url, function( error, response ) {
            if (error) reject(error);
            else resolve(response);
        })
    });
};

var getData = function getData( urls ) {
    return Promise.all( urls.map(request) );
};

var urls = [
  'http://someurl.com/1.json',
  'http://someurl.com/2.json',
  'http://someurl.com/3.json',
];

getData(urls).then(function( responses ) {
    var results = responses.map(JSON.parse);
    // do somethign with async results
});

如果你能使用承诺,最好的方法就是使用它们。 确保您的请求函数返回一个承诺,这样您就可以执行如下操作:

var request = function request( url ) {
    return new Promise(function requestPromise( resolve, reject ) {
        myAjaxCallOrOtherAsyncCall( url, function( error, response ) {
            if (error) reject(error);
            else resolve(response);
        })
    });
};

var getData = function getData( urls ) {
    return Promise.all( urls.map(request) );
};

var urls = [
  'http://someurl.com/1.json',
  'http://someurl.com/2.json',
  'http://someurl.com/3.json',
];

getData(urls).then(function( responses ) {
    var results = responses.map(JSON.parse);
    // do somethign with async results
});
使用
Promise.all()
等待所有承诺完成,尽管这确实需要使用一个返回承诺的请求库,如

使用
Promise.all()
等待所有承诺完成,尽管这确实需要使用一个返回承诺的请求库,如


尝试使用触发器。收集所有数据后,使用

$(trigger_obj).trigger('loading_complete');
然后把它变成一个处理器

$(trigger_obj).on('loading_complete', function () {
  \\ logic ...
});

尝试使用触发器。收集所有数据后,使用

$(trigger_obj).trigger('loading_complete');
然后把它变成一个处理器

$(trigger_obj).on('loading_complete', function () {
  \\ logic ...
});

使用,您可以促进承诺。正如其他人已经指出的那样:

import Request from 'request-promise-native'

// List of urls
const urls = [
  'http://someurl.com/1.json',
  'http://someurl.com/2.json',
  'http://someurl.com/3.json',
]

// The simplest form to create a bunch of request promises:
Promise.all(urls.map(Request))

// Otherwise it could look as follows:
const urlPromises = urls.map(url => Request({
  uri: 'http://www.google.com'
  // and more options
}))

// Or with promise chains:
const urlPromiseChain = (url) => {
  return Request(url)
         .then(doSomethingWithResponse)
         .catch(logButDontFailOnError)
}

const urlPromiseChains = urls.map(urlPromiseChain)

Promise.all(urlPromises /* or urlPromiseChains */)
.then(responses => console.log(responses))

使用,您可以促进承诺。正如其他人已经指出的那样:

import Request from 'request-promise-native'

// List of urls
const urls = [
  'http://someurl.com/1.json',
  'http://someurl.com/2.json',
  'http://someurl.com/3.json',
]

// The simplest form to create a bunch of request promises:
Promise.all(urls.map(Request))

// Otherwise it could look as follows:
const urlPromises = urls.map(url => Request({
  uri: 'http://www.google.com'
  // and more options
}))

// Or with promise chains:
const urlPromiseChain = (url) => {
  return Request(url)
         .then(doSomethingWithResponse)
         .catch(logButDontFailOnError)
}

const urlPromiseChains = urls.map(urlPromiseChain)

Promise.all(urlPromises /* or urlPromiseChains */)
.then(responses => console.log(responses))

Promise.all()sense@Aron
https://www.npmjs.com/package/request
@Aron My bad.对不起,修复后首先,您不能等待异步响应完成后再返回。有关该问题的所有详细信息,请参阅。
Promise.all()
您使用的是什么请求库?
从“require”导入请求
不做任何更改sense@Aron
https://www.npmjs.com/package/request
@Aron My bad.对不起,修复后首先,您不能等待异步响应完成后再返回。有关该问题的所有详细信息,请参阅。这与多个同步调用?这与多个异步调用有什么关系?