在 setInterval 上打印两次的项目

Items printing twice on setInterval

出于某种原因,每隔 25000 MS(25 秒),我的 ListLabel 就会被打印两次。这些副本恰好每 25 秒创建一次。我的代码如下:

GOT TO LABELS ________________________________
Labels:
- [Imap]/Trash
- DRAFT
- UNREAD
- CATEGORY_UPDATES
- CATEGORY_PROMOTIONS
- INBOX
- CATEGORY_SOCIAL
- CATEGORY_PERSONAL
- CATEGORY_FORUMS
- [Imap]/Drafts
- Notes
- TRASH
- CHAT
- IMPORTANT
- [Imap]/Sent
- STARRED
- SPAM
- SENT
- [Imap]/Outbox
GOT TO LABELS ________________________________
Labels:
- [Imap]/Trash
- DRAFT
- UNREAD
- CATEGORY_UPDATES
- CATEGORY_PROMOTIONS
- INBOX
- CATEGORY_SOCIAL
- CATEGORY_PERSONAL
- CATEGORY_FORUMS
- [Imap]/Drafts
- Notes
- TRASH
- CHAT
- IMPORTANT
- [Imap]/Sent
- STARRED
- SPAM
- SENT
- [Imap]/Outbox

这是我的主要JS文件,它使用了express等模块,以及我自己的一些模块。

var express = require('express');
var app = express();
var fs = require('fs');
var getnewtoken = require('./auth.js');
var getauth = require('./getauth.js');
var getnewauth = require('./getnewauth.js');
var SCOPES = ['https://mail.google.com/'];
var google = require('googleapis');
var googleAuth = require('google-auth-library');

// getnewtoken(function (auth) { NEW ACCESS TOKEN
// listLabels(auth);
// });


listLabels();

    function startproccess(token) {
            getauth(token, function (auth) {
                setInterval( function (){
                    listLabels(auth);
                }, 25000)
            });
    }

function listLabels(auth) {
    if(typeof auth === 'undefined'){ // First run, no auth key found
        getnewtoken( function (token) {
            startproccess(token);
        });
        console.log('auth not valid, going to startproccess');
    }
        var gmail = google.gmail('v1');
        gmail.users.labels.list({
                auth: auth,
                userId: 'me@email.com',
        }, function(err, response) {
                if (err) { // API KEY NO LONGER VALID
                        console.log('The API returned an error: ' + err);
                        // Get new access token
                        getnewtoken( function (token) {
                            startproccess(token);
                            console.log("New token added");
                            return;
                        });
                        return;
                }
                var labels = response.labels;
                if (labels.length == 0) {
                        console.log('No labels found.');
                } else {
                        console.log('Labels:');
                        for (var i = 0; i < labels.length; i++) {
                                var label = labels[i];
                                console.log('- %s', label.name);
                        }
                }
        });
}


app.listen(3000, function(){
    //console.log("Listening on port 3000");
});

一次

auth==='undefined' 

你需要中断函数,否则它会一直保持运行直到结束。

在您的代码中,您调用函数 startproccess 两次,而它应该只调用一次。

只需添加 "return" if auth==='undefined' 即可使函数中断。