javapote如何实现方法调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javapote如何实现方法调用相关的知识,希望对你有一定的参考价值。

参考技术A 对象名加方法名,方法名,new三种调用方式。
一般的,在Java语言中,调用方法有三种方式第一种是通过对象名加方法名进行调用,这是最普通的也是最常见的一种调用方式,第二种,通过new关键字调用构造方法,这种是在实例化对象时使用的方式,第三种,通过类名加方法名调用,当需要调用的那个方法为静态有static的方法时使用。
静态方法内部调用其他方法 静态方法可以直接调用静态方法, 除了在 main 方法中,还可以在自定义的静态方法中直接调用, 非静态方法内部调用,非静态方法可以直接调用静态方法与非静态方法。

node.js:如何在 forEach 循环中使用异步调用实现路由方法?

【中文标题】node.js:如何在 forEach 循环中使用异步调用实现路由方法?【英文标题】:node.js: how to implement a routing method with an async call inside a forEach loop? 【发布时间】:2015-12-11 23:41:29 【问题描述】:

我必须实现这样的逻辑:

var express = require('express'),
    request = require('request');

var array = [
   url: 'http://www.example1.com' ,
   url: 'http://www.example2.com' ,
];

express.Router().get('/job', function (req, res) 
  results = [];
  array.forEach(function (item) 
    request(item.url, function (error, response, body) 
      if (!error && response.statusCode == 200) 
        results.push(body);
      
  );
  res.json(results); // <== wrong, results array is empty, here...
);

如何调用 res.json(results) 以确保 forEach 循环已结束?

更新:它不是建议答案的重复!

当所有请求完成时我需要 res.json(),而当 forEach 循环完成时 not... :-(

【问题讨论】:

Callback after ForEach is done. 的可能重复项 forEach 已完成。不是异步的request() 函数。 查看我的更新... :-( 【参考方案1】:

您可以使用asnyc series 来实现此目的。像这样的:

var express = require('express'),
    request = require('request');
    async = require('async);

...

async.series([
    function(callback) 
        request('http://www.example1.com', function (error, response, body) 
            if (!error && response.statusCode == 200) 
                callback(null, body);
            
        );
    ,
    function(callback) 
        request('http://www.example2.com', function (error, response, body) 
            if (!error && response.statusCode == 200) 
                callback(null, body);
            
        );
    
], function(err, res) 
    res.json(res);
);

【讨论】:

在现实生活中,我没有 2 个请求,但有数千个...... :-( 我不认为等待数千个请求完成是个好主意。也许你应该改变你的逻辑并寻找一个后台进程来处理它们? 好点!在哪里可以找到有关将节点作为后台进程运行的一些信息? 这里有一篇好文章:andygup.net/node-js-moving-intensive-tasks-to-a-child-process 谢谢...我想我不会采用建议的方法:我只会将节点进程作为 cron 作业运行;进程状态将在数据库上共享...【参考方案2】:

实现此目的的简单方法:

var express = require('express'),
    request = require('request');

var array = [
   url: 'http://www.example1.com' ,
   url: 'http://www.example2.com' ,
];

//store number of completed calls
var completed = 0;

express.Router().get('/job', function (req, res) 
  results = [];
  array.forEach(function (item) 
    request(item.url, function (error, response, body) 
      if (!error && response.statusCode == 200) 
        results.push(body);

        completed = completed + 1; //iterate counter
        onComplete(); //attempt completion
      
  );

  function onComplete()
    if(completed != array.length) 
      return;
    
    res.json(results); 
    // ... rest of code that relies on results
  ;

);

【讨论】:

【参考方案3】:

你应该使用承诺! (此示例适用于最新版本的节点,因为支持原生承诺)

var arrayPromises = [];

array.forEach(function (item) 

   arrayPromises.push(new Promise(function(resolve, reject) 
       request(item.url, function (error, response, body) 
          if (!error && response.statusCode == 200) 
             resolve(body);
          else
            resolve();
          
       );
   ));
);

Promise.all(arrayPromises).then(function(results)
  res.json(results);
);

【讨论】:

以上是关于javapote如何实现方法调用的主要内容,如果未能解决你的问题,请参考以下文章

ios监听锁屏解锁如何实现,需要调用啥方法?

如何在基类上调用显式实现的接口方法

java 当一个接口被多个类继承时 如何知道是调用的哪个类的实现

node.js:如何在 forEach 循环中使用异步调用实现路由方法?

如何实现RPC远程调用

JS中,如何实现在调用一个方法时用另外一个方法的返回值做参数