簡體   English   中英

node_klout node.js:緊跟着getUserScore的getKloutIdentity無法正常工作

[英]node_klout node.js : getKloutIdentity followed by getUserScore not working

我有一個非常簡單的代碼,第一個console.log打印klout_user.id,但從不打印第二個控制台,即klout_response.score。 名稱是Twitter屏幕名稱的數組。 由於控制流程的緣故,問題也可能出現。 我試過獨立運行兩個klout調用,它可以工作。 但是在以下代碼中不起作用。 有什么線索嗎?

names.forEach(function (name, i) { 
    klout.getKloutIdentity(name, function(error, klout_user) {
        if (klout_user.hasOwnProperty("id") && klout_user.id > 0) {
            console.log("klout user", name, "has id : ", klout_user.id); 
            klout.getUserScore(klout_user.id, function(error, klout_response) {
            console.log("klout_user score : ", klout_response.score);
        });
         }
    });
});

我的印象是,由於它打印了第一個console.log,因此也應該執行對getUserScore的調用。 但事實並非如此。 怎么了 ?

我在node_klout github頁面上得到了Cojohn的答案。 將其粘貼在此處作為答案。


您的代碼沒有獲取Klout用戶評分,因為您依賴於for循環內的I / O綁定函數。 基本上,您要觸發對Klout API的初始調用,該調用通常會返回並打印到控制台,並且您的過程可能已經完成或函數正在返回,然后才有機會執行klout.getUserScore()。 下面是一個示例代碼,該代碼將始終在退出之前等待響應; 請注意,我的測試hack並不是特別快或“異步”,它一次只能處理一個用戶,不適合大量用戶。 我的名字和api_key vars已被省略,您需要提供自己的名字。

var klout = new Klout(api_key, "json", "v2");
var events = require("events");

var e = new events.EventEmitter();

e.on("done", function() {
    process.exit();
});

e.on("next", function(i) {
    if (i >= names.length) {
        e.emit("done");
        return;
    }

    console.log("retrieving kloutid for user %s", names[i]);
    klout.getKloutIdentity(names[i], function(error, klout_user) {
        if (error) {
            console.log(error);
            e.emit("next", i+1);
            return;
        }

        if (!klout_user.hasOwnProperty("id") || klout_user.id <= 0) {
            e.emit("next", i+1);
            return;
        }

        console.log("klout user %s has id : %s", names[i], klout_user.id); 

        klout.getUserScore(klout_user.id, function(error, klout_response) {
            if (error) {
                console.log(error);
                e.emit("next", i+1);
                return;
            }

            console.log("klout_user score : %s", klout_response.score);
            e.emit("next", i+1);
        });         
    });
});

e.emit("next", 0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM