Openwhisk и Minio с проблемой пакетных действий

Я пытаюсь создать действие openwhisk, использующее сервер minio. Для этого мне нужно упаковать свое действие как модуль nodeJs, потому что minio не поддерживается openwhisk. Мой файл index.js следующий:

function myAction(){
    const minio = require("minio")
    const minioClient = new minio.Client({
        endPoint: 'myIP',
        port: 9000,
        secure: false,
        accessKey: '###########',
        secretKey: '###########'
    });

    minioClient.listBuckets(function(err, buckets) {
        if (err) return console.log(err)
        return {payload: buckets}
    })

}

exports.main = myAction;

Когда я вызываю это действие, я получаю {}. У вас есть идеи, почему это происходит? Любые предложения о том, как я могу это решить?


person zak    schedule 08.03.2018    source источник


Ответы (1)


Действие OpenWhisk ожидает, что вы вернете Обещаю, если вы что-то делаете асинхронно.

В вашем случае вам нужно будет создать обещание, которое будет разрешено после выполнения метода listBuckets (обычно это означает: вам нужно разрешить его в обратном вызове).

function myAction(){
    const minio = require("minio")
    const minioClient = new minio.Client({
        endPoint: 'myIP',
        port: 9000,
        secure: false,
        accessKey: '###########',
        secretKey: '###########'
    });

    return new Promise(function(resolve, reject) {
        minioClient.listBuckets(function(err, buckets) {
            if (err) {
                reject(err);
            } else {
                resolve({payload: buckets});
            }
        });
    });
}

exports.main = myAction;

(Непроверенный код).

person markusthoemmes    schedule 08.03.2018
comment
Это решает проблему, вы совершенно правы. Большое спасибо - person zak; 08.03.2018