Обещание не выполняется синхронно в nodejs? - PullRequest
0 голосов
/ 10 декабря 2018

Я новичок в NodeJ. Мы все знаем, что обещание также является одним из методов синхронного выполнения в nodeJS. В моем коде это не выполняется синхронно. Кто-нибудь может сказать мне, в чем проблема в моем коде?Я приложил приведенный ниже код и вывел то, что получил сейчас. Любые комментарии будут признательны. Заранее спасибо ......

КОД:

getUser(25)
    .then((user)=>{
        console.log(`User:`,user.username);
        getgithubRepo(user.username);
    })
    .then((repos)=>{
        console.log("Repos:",repos);
        getCommit(repos[1]);
    })
    .then((message)=>{
        console.log(`Final Message: ${message}`);
    })
    .catch((err)=>{
        console.log(`Reject: ${err}`);
});



function getUser(id){

    return new Promise((resolve,reject)=>{

        if(id === 25){

            setTimeout(()=>{

                console.log(`Id: ${id}`);

                console.log(`Reading a user from database`);

                resolve({id:id,username:'vigneshTokyo'});

            },3000);

        }
        else{

            setTimeout(()=>{

                console.log(`Your given Id is not found...`);

                reject(`User not found in database`);

            },3000); 
        }
    });
}


function getgithubRepo(username){

    return new Promise((resolve,reject)=>{

        if(username === "vigneshTokyo"){

            setTimeout(()=>{

                console.log(`Username: ${username}`);

                console.log(`Calling Github API...`);

                const repos=['vikirepo1','vikirepo2','vikirepo3'];

                resolve(repos);

            },2000);

        }
        else{

            setTimeout(()=>{

                console.log(`Repositories are not found of this username`);

                reject(`Repositories are not found of this username`);

            },2000);
        }

    });
}


function getCommit(repo){

    return new Promise((resolve,reject)=>{

        if(repo === "vikirepo2"){

            setTimeout(()=>{

                console.log(`Repository Name: ${repo}`);
        
                console.log(`Going to commit this ${repo}.....`);
               
                return resolve('Repo commited succesfully');
        
            },2000);

        }
        else{

            setTimeout(()=>{

                return reject('Repos not found in this account');
        
            },2000);

        }

    });

    
}

ВЫХОД:

Id: 25
Reading a user from database
User: vigneshTokyo
Repos: undefined
Reject: TypeError: Cannot read property '1' of undefined
Username: vigneshTokyo
Calling Github API...

Expected output:

Id: 25
Reading a user from database
Resolve: { id: 25, username: 'vigneshTokyo' }
Username: vigneshTokyo
Calling Github API...
List of Repostories: [ 'vikirepo1', 'vikirepo2', 'vikirepo3' ]
Repository Name: vikirepo2
Going to commit this vikirepo2.....
Message: Repo commited succesfully
...