我有以下代码:
function get_status(){
try {
/* GET - status */
async.map(['http://url1.com/', 'http://url2.com/', 'http://url3.com/'], function(value, callback) {
/* GET - request status */
request.post({
url: value,
form: { 'mycustomdata': ""+mycustomdata+"" },
method: 'POST'}, function(err, res, body) {
/* CHECK - response */
if (!err && typeof body !== 'undefined' && res.statusCode == 200) {
console.log('get status success...')
callback();
} else {
callback('failed to get status');
}
})
}, function(err, results) {
if (err) {
console.log(err); return false;
} else {
console.log('finished...') }
})
}
我需要在async.map处理中的所有三个网址都完成后(某些网址会回复一些网址)来调用输出完成的内容...'并从此输出再次调用此函数...以便每次处理所有URL时该函数都会运行。
所以简而言之..我需要当async.map处理所有网址输出到控制台时完成......'并再次运行相同的功能。
但我只能从控制台获得...
get status success...
failed to get status..
get status sucess..
我永远不会被称为
'finished'...
这样我就可以对它进行调整...请你点亮我需要写的内容吗?
答案 0 :(得分:1)
你只会将// TodoItem
class TodoItem extends Component {
handleRemove = () => this.props.onRemove(this.props.id)
render() {
return (
<div className='row myList'>
<p className='col-xs-10'> {this.props.text}-{this.props.id} </p>
<button className='btn btn-danger pull-right col-xs-2' onClick={this.handleRemove}> Delete </button>
</div>
)
}
}
// App render
render() {
return (
<div className='todo-wrapper'>
<Header/>
<InputTodo todoText='Type Here...' addTodo={this.addHere}/>
<div>
{this.state.todos.map(({ id, text }, key) =>
<TodoItem key={key} id={id} text={text} onRemove={this.removeHere} />
)}
</div>
</div>
);
}
param传递给最后的回调。我相信,从我上次使用async.js开始,你需要传入err
作为第一个参数继续下一个函数,这里是最后一个函数。否则将跳过最终函数作为错误。
null
如果你想让它再次自我调用,那只是简单的递归。将async.map包装在函数中,当 callback(null, results);
运行时,再次调用该函数。
答案 1 :(得分:0)
好的,我做了完整的示例,以便您可以看到问题所在,您可以尝试更改代码:
var async = require('async'),
request = require('request');
var myUrls = [ 'http://56.123.65.86:8080/api/server_status/',
'http://88.96.42.122:8080/api/server_status/',
'http://12.23.32.25:8080/api/server_status/',
'http://251.214.44.58:8080/api/server_status/',
'http://122.23.32.54:8080/api/server_status/' ]
async.map(myUrls, function(url, callback) {
console.log('getting url...'+url)
request(url, function(error, response, html) {
// Some processing is happening here before the callback is invoked
if (typeof response !== undefined) {
console.log('response ok...'+url)
return callback(null, html)
} else {
console.log('response failed...'+url)
return callback(error, html);
}
});
}, function(err, results) {
if (results) {
console.log('all finished...')
}
});
我得到了这个:
getting url...http://56.123.65.86:8080/api/server_status/
getting url...http://88.96.42.122:8080/api/server_status/
getting url...http://12.23.32.25:8080/api/server_status/
getting url...http://251.214.44.58:8080/api/server_status/
getting url...http://122.23.32.54:8080/api/server_status/
需要得到这个:
getting url...http://56.123.65.86:8080/api/server_status/
getting url...http://88.96.42.122:8080/api/server_status/
getting url...http://12.23.32.25:8080/api/server_status/
getting url...http://251.214.44.58:8080/api/server_status/
getting url...http://122.23.32.54:8080/api/server_status/
all finished...
我无法完成全部...所以它一直保持着获取网址并保持永久......所以我无法理解为什么所有项目都已完成...而不是在处理完所有项目后的触发器......