Как вернуть значение из асинхронной функции в узле js и сохранить в переменной внутри сценария конвейера jenkins? - PullRequest
0 голосов
/ 15 февраля 2019

Вызов сценария Node js в конвейерном скрипте Jenkins выглядит следующим образом: def result = bat node abc/xyz.js result.id, который будет использоваться позже в конвейерном скрипте

Внутри xyz.js я определил функцию и возвращаю значение следующим образом:

function sampleFunc(){
    // func2 is an async function
    func2()
    .then(results) => {
       // below console stmt is able to print results
       console.log(results)
       return results
    })
}

console.log(sampleFunc())

печать журнала консоли не определена.

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019

Как сказал n9iels, вы забыли вернуть значение.Еще один (чуть короче) пример ниже:

function func2() {
  // Mimic async function
  return new Promise(resolve => {
    setTimeout(() => {
      resolve("Hello World!");
    }, 1000);
  });
}

func2().then(results => {
  console.log(results);
});
0 голосов
/ 16 февраля 2019

Если вы используете Node.js 8 или новее, вы можете использовать async/await:

function sampleFunc(){
    // func2 is an async function
    func2()
    .then(results) => {
       // below console stmt is able to print results
       console.log(results)
       return results
    })
}

async function main() {
    console.log(await sampleFunc())
}

main();
0 голосов
/ 16 февраля 2019

Причина, по которой sampleFunc() возвращает undefined, заключается в том, что она фактически ничего не возвращает.Вы возвращаете значение внутри then части асинхронного func2().Поскольку вы сами не возвращаете func2, sampleFunc не имеет возвращаемого значения.

Правильная реализация будет такой:

function sampleFunc(){
    // func2 is an async function
    return func2().then(results) => {
        // below console stmt is able to print results
        console.log(results)
        return results
    })
}

// func2 and thus sampleFunc are async. So the return value will be a promise and not the actual return value
sampleFunc().then(function(result) { console.log(result); })

Обещания могут быть действительно запутанными, когда вы используете их в первый развремя.Вы можете прочитать больше об обещаниях здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises

Редактировать: Приведенный выше пример будет работать, если func2() имеет правильную реализацию Promise и вызывает его функцию разрешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...