Node-js: отправка множества вложений с помощью узла Cisco Spark Client - PullRequest
0 голосов
/ 12 ноября 2018

Я использую Node Cisco Spark Client (https://github.com/marchfederico/node-sparkclient) для отправки сообщения с любыми вложениями. Я могу отправить 1 приложение, но не много.

Это мой код: Можете ли вы помочь мне, пожалуйста?

function postMessage(roomId,message,nbfichiers) {
return new Promise(function (fulfill, reject){

     var messageParams = {}
     var sanitizedMessage = '>'+message.replace(/\n/g,"<br>")

    if (nbfichiers.length > 0){
        console.log("Nombres de pièces jointes : " + nbfichiers.length);
        for(var b=0; b < nbfichiers.length; b++){
            messageParams.file = fs.readFileSync('uploads/'+nbfichiers[b]+'');
            messageParams.filename = nbfichiers[b];
            messageParams.markdown = true

            sparkClient.createMessage(roomId,sanitizedMessage,messageParams,function(err,message){
                if (err) {
                    reject(err)
                }
                else {
                    fulfill(message)
                }
          });

                fs.unlinkSync('uploads/'+nbfichiers[b]);

        }
    }
})
}

1 Ответ

0 голосов
/ 12 ноября 2018

Используя цикл внутри new Promise(...), вы получите результат первой итерации только при использовании обещания, действительно ли это ожидаемое поведение?

Согласно документации node-sparkclient одновременно можно отправлять только одно вложение. Вы можете отправить несколько вложений, используя Promise.all следующим образом:

function postAttachment(roomId, message, file) {
    return new Promise(function (fullfill, reject){

        var messageParams = {}
        var sanitizedMessage = '>'+message.replace(/\n/g,"<br>")
        messageParams.file = fs.readFileSync('uploads/'+file);
        messageParams.filename = file;
        messageParams.markdown = true  

        sparkClient.createMessage(roomId, sanitizedMessage, messageParams, function(err,message){
            if (err) {
                reject(err)
            }
            else {
                fs.unlinkSync('uploads/'+ file);
                fullfill(message)
            }
        });
   })
}

function postAttachments(roomId, message, files) {
    return Promise.all(files.map(file => postAttachment(roomId, message, file));
}

Если вы хотите отправить только одно вложение со всеми файлами, вы можете объединить свои файлы перед отправкой.

...