Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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 异步队列中的函数内的异步twitter调用-https://github.com/DeviaVir/zenbot 系统信息 我编写了自定义代码(与使用zenbot香草版相反):我添加了一个策略和lib文件。该策略使用lib文件从twitterapi中提取数据并计算其情绪 操作系统平台和发行版(如Linux Ubuntu 16.04):Ubuntu 16.04 Zenbot版本(提交参考或版本):v4.1.0 Zenbot分支:不稳定 节点JS版本:v8.11.2 Python版本(使用Python脚本时):Python 2.7.12、3.5.2 复制的精确命令(包括所有内容): /zenbot.sh交易——票据——策略情绪——第2天——周期=1000万 我是否对conf sample.js做了任何更改?:否 -**使用的额外库-twitter npm-v1.7.1,维德情绪-v1.1.3 描述问题_Javascript_Node.js_Asynchronous_Twitter - Fatal编程技术网

Javascript 异步队列中的函数内的异步twitter调用-https://github.com/DeviaVir/zenbot 系统信息 我编写了自定义代码(与使用zenbot香草版相反):我添加了一个策略和lib文件。该策略使用lib文件从twitterapi中提取数据并计算其情绪 操作系统平台和发行版(如Linux Ubuntu 16.04):Ubuntu 16.04 Zenbot版本(提交参考或版本):v4.1.0 Zenbot分支:不稳定 节点JS版本:v8.11.2 Python版本(使用Python脚本时):Python 2.7.12、3.5.2 复制的精确命令(包括所有内容): /zenbot.sh交易——票据——策略情绪——第2天——周期=1000万 我是否对conf sample.js做了任何更改?:否 -**使用的额外库-twitter npm-v1.7.1,维德情绪-v1.1.3 描述问题

Javascript 异步队列中的函数内的异步twitter调用-https://github.com/DeviaVir/zenbot 系统信息 我编写了自定义代码(与使用zenbot香草版相反):我添加了一个策略和lib文件。该策略使用lib文件从twitterapi中提取数据并计算其情绪 操作系统平台和发行版(如Linux Ubuntu 16.04):Ubuntu 16.04 Zenbot版本(提交参考或版本):v4.1.0 Zenbot分支:不稳定 节点JS版本:v8.11.2 Python版本(使用Python脚本时):Python 2.7.12、3.5.2 复制的精确命令(包括所有内容): /zenbot.sh交易——票据——策略情绪——第2天——周期=1000万 我是否对conf sample.js做了任何更改?:否 -**使用的额外库-twitter npm-v1.7.1,维德情绪-v1.1.3 描述问题,javascript,node.js,asynchronous,twitter,Javascript,Node.js,Asynchronous,Twitter,问题是,一旦推特API拉取完成,Zenbot将继续打印相同的BTC值。它似乎没有退出策略中的onPeriod()函数。从Twitter获取支持是一个功能请求,因为这将允许用户执行情绪分析或执行其他类型的分析来进行交易。我很快就能让它发挥作用了,但我仍然无法解释为什么会发生这种情况。我假设这与我正在使用一个异步函数这一事实有关——我必须这样做,因为如果我不等待返回值,情绪将根据一个未定义的值进行计算 在调用main()之后,我在onPeriod()函数中放置了一个console.log(),但正如

问题是,一旦推特API拉取完成,Zenbot将继续打印相同的BTC值。它似乎没有退出策略中的onPeriod()函数。从Twitter获取支持是一个功能请求,因为这将允许用户执行情绪分析或执行其他类型的分析来进行交易。我很快就能让它发挥作用了,但我仍然无法解释为什么会发生这种情况。我假设这与我正在使用一个异步函数这一事实有关——我必须这样做,因为如果我不等待返回值,情绪将根据一个未定义的值进行计算

在调用main()之后,我在onPeriod()函数中放置了一个console.log(),但正如您从errorlog.txt中看到的,它没有到达那个点-它被卡在main()中,即使main()已经完成,并且已经执行了持有、购买或出售的决定-请参见第20、21、22行(第23行是相同BTC价格的重复输出,直到我退出流程。)

在运行调试器并看到它在async_hooks.js和net.js中无休止地循环之后,我发现onPeriod()函数是在async.queue()中调用的。在另一个异步调用中进行异步调用是一个问题吗?还是其他问题

源代码/错误日志 文件位置:zenbot/extensions/strategy/touction_strat/strategy.js

let sentiment = require('../../../lib/calculateSentiment'),
twit = require('../../../lib/getTweets.js'),
n = require('numbro'),
z = require('zero-fill'),
getTweetsBoolean = true

module.exports = {
name: 'sentiment_strat',
description: 'Strategy based on sentiment.',
getOptions: function () {
    this.option('period', 'period length, same as --period_length',   
 String, '10m')


},

calculate: function (s) {

    if (s.in_preroll) {
        return
    }
},

onPeriod: function (s, cb) {
    if (s.in_preroll) {
        cb()
        return
    }

    async function main(getTweetsBoolean) {
        number_of_tweets = 100
        pulled_tweets = await twit('BTC', number_of_tweets)
        console.log('pulled_tweets')
        sentiment(s, 'sentiment', pulled_tweets)

        console.log('Sentiment: ' + s.period.sentiment)

        if (s.period.sentiment > 0.1) {
            console.log('buy')
            s.signal = 'buy'
        } else if (s.period.sentiment < -0.1) {
            console.log('sell')
            s.signal = 'sell'
        } else {
            console.log('hold')
        }
        return

    }

    main()
    console.log('onPeriod After main()')
    cb()
},

onReport: function (s) {
    var cols = []
    return cols
   }
}
let touction=require('../../../lib/calculatesential'),
twit=require('../../../lib/getTweets.js'),
n=需要('numbro'),
z=要求(“零填充”),
getTweetsBoolean=true
module.exports={
名称:“感伤”,
描述:“基于情绪的策略。”,
getOptions:function(){
选项('period','period length,与--period_length'相同),
字符串“10m”)
},
计算:函数{
如果(s.in_预滚){
返回
}
},
onPeriod:函数(s,cb){
如果(s.in_预滚){
cb()
返回
}
异步函数main(getTweetsBoolean){
推文数量=100
pulled_tweets=等待twit('BTC',tweets的数量)
console.log('pull_tweets')
情绪(s,“情绪”,推特)
console.log('情绪:'+s.period.情绪)
如果(s.period.perious>0.1){
console.log('buy')
s、 信号=‘买入’
}否则如果(s.period.perious<-0.1){
console.log('sell')
s、 信号=‘卖出’
}否则{
console.log('hold')
}
返回
}
main()
console.log('onPeriod After main()'))
cb()
},
onReport:功能{
var cols=[]
返回cols
}
}
文件位置:zenbot/lib/getTweets.js

 var Twitter = require('twitter')

module.exports = function getTweets(keyphrase, number_of_tweets) {

function parseTweets(tweets) {
var parsed_tweets = []
list_of_unparsed_tweets = tweets['statuses']
for (let i = 0; i < list_of_unparsed_tweets.length; i++) {
    num_followers = list_of_unparsed_tweets[i]['user']  
 ['followers_count']
    user = list_of_unparsed_tweets[i]['user']['screen_name']
    parsed_tweets.push({"tweet":filter(list_of_unparsed_tweets[i]                                                                          
  ['full_text']),"num_followers":num_followers, "user": user})
}
  return parsed_tweets
}

function filter(tweet){
return tweet.replace(/["']/g,'').replace(/[()*.,:;]/g,'').replace(/\W
\s/g,'')
}

//create twitter client
var client = new Twitter({
    consumer_key: '',
    consumer_secret: '',
    access_token_key: '',
    access_token_secret: ''
});

//perform the get request based on the given keyphrase
return new Promise(function(resolve, reject){
client.get('search/tweets', {
    q: keyphrase,
    count: number_of_tweets,
    tweet_mode: 'extended',
    lang : 'en'

 }, function (error, tweets, response) {
    if(error){
        console.log(error)
        return
    }
    resolve(parseTweets(tweets))
       });
    });
}
var Twitter=require('Twitter'))
module.exports=函数getTweets(关键字短语,tweets的数量){
函数解析tweets(tweets){
var-parsed_tweets=[]
未分析的tweets列表=tweets['status']
for(设i=0;i
文件位置:zenbot/lib/calculatesementation.js

var vader = require('vader-sentiment')

module.exports = function calculateSentiment(s, key, texts) {
if (s.lookback == null || s.period == null) {
 s.period['key'] = ''
} else {
 let totalFollowers = 0
 for (let j = 0; j < texts.length; j++) {
   totalFollowers += texts[j]['num_followers']
 }
 let totalSentiment = 0
 for (let i = 0; i < texts.length; i++) {
   let weighted_normalized_sentiment = 
 vader.SentimentIntensityAnalyzer.polarity_scores(texts[i] 
 ['tweet'])['compound']*texts[i]['num_followers']/totalFollowers
   totalSentiment += weighted_normalized_sentiment 
 }
 s.period[key] = totalSentiment / texts.length

     } 
 }
var vader=require('vader-touction'))
module.exports=函数计算指令(s、键、文本){
如果(s.lookback==null | | s.period==null){
s、 句点['key']=''
}否则{
设totalFollowers=0
for(设j=0;j
结果表明,这是一个不包含特定标志的问题。必须将--minimum_period作为标志