Обещание не работает в приложении Azure Javascript - PullRequest
0 голосов
/ 24 января 2019

У меня есть простая демонстрационная программа, чтобы понять концепцию Promise, но она не работает должным образом, посмотрите мой код, который я пробовал.

module.exports = async function (context, iotHubMessage) {

    context.log('START');
    var promise1 = new Promise(function (resolve, reject) {

        setTimeout(function () {
            resolve('foo');
        }, 1000);

    });

    context.log(promise1);

    promise1.then(function (resolve) {
         context.log(resolve);
        // expected output: "foo"
    });

};

, и я получаю этот вывод

2019-01-24T12:58:38.695 [Information] START
2019-01-24T12:58:38.695 [Information] Promise { <pending> }
2019-01-24T12:58:38.696 [Information] Executed 

почему я не получаю foo в выходном журнале, пожалуйста, помогите мне спасибо!

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Кажется, что Azure убивает ваш процесс после возврата функции. Поскольку он не возвращал обещание (или, скорее, не возвращал обещание, которое действительно ожидало вашего времени ожидания), он не ожидал выполнения обратного вызова обещания.

Вы можете использовать

module.exports = function(context, iotHubMessage) {
//               ^^^^^^^^ no async necessary here
    context.log('START');
    var promise1 = new Promise(function (resolve, reject) {
        setTimeout(resolve, 1000);
    });
    context.log(promise1);
    var promise2 = promise1.then(function() {
        context.log("promise fulfilled");
    });
    return promise2;
//  ^^^^^^^^^^^^^^^^
}

или с синтаксисом async / await:

module.exports = async function(context, iotHubMessage) {
    context.log('START');
    var promise1 = new Promise(function (resolve, reject) {
        setTimeout(resolve, 1000);
    });
    context.log(promise1);
    await promise1;
//  ^^^^^
    context.log("promise fulfilled");
}
0 голосов
/ 24 января 2019

Возможно вместо promise1.then(...) попробуйте:

module.exports = async function (context, iotHubMessage) {

    context.log('START');
    var promise1 = new Promise(function (resolve, reject) {

        setTimeout(function () {
            resolve('foo');
        }, 1000);

    });

    context.log(promise1);

    // Use await instead of promise.then(...)

    let resolve = await promise1;
    context.log(resolve);

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