Как сделать так, чтобы profile.displayName возвращало имя в чате LINE - PullRequest
0 голосов
/ 21 июня 2019

Я начинаю использовать lib @ line / bot.sdk и хочу получить displayName из функции и вернуть его, но он не возвращает displayName, он возвращает 'undefined'

Вот функция

record:function(userID){
    client.getProfile(userID).then((profile) => {
            let name = profile.displayName
            let ID = profile.userId
            console.log('record Name : ' + name);
            return name
            //console.log('record ID : ' + ID)
            //console.log('record Pic : '+profile.pictureUrl )
            //console.log('record Status :'+profile.statusMessage)
        }).catch((err) => {
            return "Error"
      })  
}

console.log может получить displayName но функция возвращает 'undefined' я тоже хочу вернуть displayName

1 Ответ

0 голосов
/ 21 июня 2019

Ваша проблема в том, что JavaScript асинхронный, поэтому вы не можете просто вернуть значение внутри асинхронной функции, вам нужно использовать обещание или обратный вызов:

record: function(userID, callback){
    client.getProfile(userID).then((profile) => {
        // return your name inside a callback function
        callback(null, profile.displayName);
    }).catch((err) => {
        callback(err, null);
    })
}

// Call your function and get return 'name'
record(userId, function(err, name) {
    if (err) throw err;
    console.log(name);
    // Continue here
});

Я рекомендую вам прочитать эту статью Понимание асинхронного JavaScript для получения дополнительной информации

Надеюсь, это поможет.

...