Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从函数中调用http.get时不返回响应_Javascript_Node.js_Async Await - Fatal编程技术网

Javascript 从函数中调用http.get时不返回响应

Javascript 从函数中调用http.get时不返回响应,javascript,node.js,async-await,Javascript,Node.js,Async Await,我调用了inturn调用http.get的函数。当直接调用search方法时,我得到了正确的结果,但是当我通过循环调用getAll方法时,我得到的是空的或未定义的结果 function search(url, node, notFound) { return new Promise(function(resolve, reject) { http.get(url).then(function(data){ var val = 1; for (var i

我调用了inturn调用http.get的函数。当直接调用search方法时,我得到了正确的结果,但是当我通过循环调用getAll方法时,我得到的是空的或未定义的结果

function search(url, node, notFound) {
return new Promise(function(resolve, reject) {
    http.get(url).then(function(data){

        var val = 1;
        for (var i = 0; i < data.length; i++) {
            $searchModal.find(node).append(`<div class="col-xs-12"><label> ${label} ${val}</label></div>`);
            var val = val + 1;
            for (key in data[i]) {
                var index = 1;
                if (key == "Udfs") {
                    $searchModal.find(node).append(`<div class="col-xs-12"><label>  ${key} </label></div>`);
                    for (udfKey in data[i][key]) {
                        $searchModal.find(node).append(`<div class="col-lg-3" ><div class="input-group"> <span class="input-group-addon" id="key">${udfKey}</span> <input id="accountModelId" type="text" disabled class="form-control" placeholder="" aria-describedby="accountModel" value="${data[i][key][udfKey]}"></div></div>`);
                    }
                }
                for (var j = 0; (Array.isArray(data[i][key])) && j < data[i][key].length; j++) {
                    $searchModal.find(node).append(`<div class="col-xs-12"><label> ${key} ${index}</label></div>`);
                    var index = index + 1;
                    for (objKey in data[i][key][j]) {
                        $searchModal.find(node).append(`<div class="col-lg-3" ><div class="input-group"> <span class="input-group-addon" id="key">${objKey}</span> <input id="accountModelId" type="text" disabled class="form-control" placeholder="" aria-describedby="accountModel" value="${data[i][key][j][objKey]}"></div></div>`);
                    }
                }
                if (!Array.isArray(data[i][key]) && !(data[i][key] instanceof Object)) {
                    $searchModal.find(node).append(`<div class="col-lg-3" ><div class="input-group"> <span class="input-group-addon" id="key">${key}</span> <input id="accountModelId" type="text" disabled class="form-control" placeholder="" aria-describedby="accountModel" value="${data[i][key]}"></div></div>`);
                }
            }
        }
        console.log(data);
        resolve(data.toString());
        if (data.length == 0) {
            $searchModal.find(node).append(notFound);
        }
    }).catch(function err() {
        $searchModal.show("modal")
        $searchModal.find(node).append(notFound);
    });
});
函数搜索(url、节点、未找到){
返回新承诺(功能(解决、拒绝){
get(url).then(函数(数据){
var=1;
对于(变量i=0;i
}

函数getAll(){ URL=[contactUrl、accountUrl、AssetUrl] 节点=['#contactData'、'#accountData'、'#assetData'] 列表=[$noContacts,$noAccounts,$noAsset] for(设i=0;i }

需要帮助来处理此问题。谢谢两件事:

1) 在提出请求时,您可能应该处理拒绝。因此,在调用
http.get
后的catch块中,应该
reject(err)

2) 你没有得到答复的原因是你没有等待答复。您正在循环遍历一个数据集并发送请求,然后您的代码继续运行。您要做的是等待所有请求完成,然后做一些事情。下面是一个使用es6
Promise
库中的
all()
函数的示例

 function getAll() {
  urls = [contactUrl, accountUrl, assestUrl]
  nodes = ['#contactData', '#accountData', '#assetData']
  list = [$noContacts, $noAccounts, $noAsset]

  var promiseArray = [];

  for (let i = 0; i < urls.length; i++) {
      promiseArray.push(search(urls[i], nodes[i], list[i]));
  }

  Promise.all(promiseArray)
    .then((resp) => {
      console.log(resp[0]); // response from 1st request
      console.log(resp[1]); // response from 2nd request
    }).catch((err) => {
      console.log(err);
    })
 }
函数getAll(){ URL=[contactUrl、accountUrl、AssetUrl] 节点=['#contactData'、'#accountData'、'#assetData'] 列表=[$noContacts,$noAccounts,$noAsset] var promiseArray=[]; for(设i=0;i{ console.log(resp[0]);//来自第一个请求的响应 console.log(resp[1]);//来自第二个请求的响应 }).catch((错误)=>{ 控制台日志(err); }) }
两件事:

1) 在提出请求时,您可能应该处理拒绝。因此,在调用
http.get
后的catch块中,应该
reject(err)

2) 你没有得到答复的原因是你没有等待答复。您正在循环遍历一个数据集并发送请求,然后您的代码继续运行。您要做的是等待所有请求完成,然后做一些事情。下面是一个使用es6
Promise
库中的
all()
函数的示例

 function getAll() {
  urls = [contactUrl, accountUrl, assestUrl]
  nodes = ['#contactData', '#accountData', '#assetData']
  list = [$noContacts, $noAccounts, $noAsset]

  var promiseArray = [];

  for (let i = 0; i < urls.length; i++) {
      promiseArray.push(search(urls[i], nodes[i], list[i]));
  }

  Promise.all(promiseArray)
    .then((resp) => {
      console.log(resp[0]); // response from 1st request
      console.log(resp[1]); // response from 2nd request
    }).catch((err) => {
      console.log(err);
    })
 }
函数getAll(){ URL=[contactUrl、accountUrl、AssetUrl] 节点=['#contactData'、'#accountData'、'#assetData'] 列表=[$noContacts,$noAccounts,$noAsset] var promiseArray=[]; for(设i=0;i{ console.log(resp[0]);//来自第一个请求的响应 console.log(resp[1]);//来自第二个请求的响应 }).catch((错误)=>{ 控制台日志(err); }) } 避免出现错误!避开这个!