2016-12-20 1 views
0

nodejs에서 외부 함수를 호출하면 자바 스크립트에서와 같이 함수를 다시 사용할 수 있지만 내 경우에는 함수가 작동하지 않게됩니다. 왜?nodejs의 콜백 내부에서 외부 함수를 호출하는 방법

nodejs에서 비동기 적으로 작동하는 것으로 추측하고 있습니다. 이 문제를 어떻게 해결할 수 있습니까? 콜백? 나는 nodejs를 처음 사용합니다. 배열 retrievedContactsArr[0] 인쇄

app.get('/googleSyncCallback', passport.authenticate('google', { 
    failureRedirect: 'url' 
}), 

function(req, res) { 

    var contacts = new GoogleContacts({ 
    token: req.token 
    }); 
    var retrievedContacts = ''; 
    var retrievedContactsArr = []; 

    contacts.getContacts(function(err, contacts) { 
    contacts.forEach(function(entry) { 
     retrievedContacts = { 
     contact: { 
      "phone": { 
      "cell": entry.phoneNumber, 
      } 
     }, 
     } 
     retrievedContactsArr.push(retrievedContacts); 
     console.log('array... ', retrievedContactsArr[0]); //prints all values 
    }); 
    }); 
    checkIfContactExists(req, res, retrievedContactsArr); 
} 
}); 

function checkIfContactExists(req, res, retrievedContactsArr) { 
    //PRINTS UNDEFINED.. 
    console.log('array... ', retrievedContactsArr[0]); //// LINE 10 
} 

라인 당신은 콜백 내에서 함수를 넣어 변경해야 10

+0

여기서 비동기 동작은 노드에 고유하지 않으며 플랫폼 전반의 자바 스크립트 언어에서 표준입니다. – nem035

+0

[비동기 호출의 응답을 반환하는 방법] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call)의 가능한 복제본 – nem035

+0

@ nem035 보통이 기능은 자바 스크립트에서 작동합니다. 그것 nodejs에서만 작동하지 않습니다 – Satyadev

답변

0

에서 정의되지 않은 반환, 당신은 또한 표현이 미들웨어를 정의 할 수 있습니다로, 함수에 콜백을 추가 할 필요가 (req, res, 다음에 콜백이되는) 시그니처 (req, res)를 동 기적으로 실행하거나 약속을 반환하거나 서명해야합니다 (req, res, next).

app.get('/googleSyncCallback', passport.authenticate('google', { 
    failureRedirect: 'url' 
}), 

function(req, res, next) { 

    var contacts = new GoogleContacts({ 
    token: req.token 
    }); 
    var retrievedContacts = ''; 
    var retrievedContactsArr = []; 

    contacts.getContacts(function(err, contacts) { 
    contacts.forEach(function(entry) { 
     retrievedContacts = { 
     contact: { 
      "phone": { 
      "cell": entry.phoneNumber, 
      } 
     }, 
     } 
     retrievedContactsArr.push(retrievedContacts); 
     console.log('array... ', retrievedContactsArr[0]); 
     checkIfContactExists(req, res, retrievedContactsArr); 
     next() 
    }); 
    }); 

    } 
    }); 

    function checkIfContactExists(req, res, retrievedContactsArr) { 
     //PRINTS UNDEFINED.. 
     console.log('array... ', retrievedContactsArr[0]); //// LINE 10 
    } 
관련 문제