показать индикатор загрузки в соответствии с выполненным процессом сервера - PullRequest
0 голосов
/ 25 октября 2018

как показать индикатор загрузки зависит от серверного процесса на стороне клиента.предположим, что клиент нажал на кнопку загрузки, затем сервер получил запрос, после того как сервер нашел данные от пользователя таблицы в базе данных1 (предположим, тысяча записей в таблице пользователя) и скопировал их в базу данных2 (пользователь таблицы), и это общее время, необходимое для поиска из базы данных1 и копированияв другую базу данных 1 мин. в моем случае у меня много таблиц и данных.Теперь моя проблема заключается в том, что если я просто показываю значок загрузки, то пользователь запутывается (он / она может подумать, что процесс застрял), другая вещь заключается в том, что, если я просто показываю загрузчик индикатора выполнения со временем жесткого кода (предположим, 1 мин) на стороне клиента, тогда чтоесли время процесса увеличивается на сервере, то и пользователь запутался.

позвольте мне показать пример кода

** // copy data from database1**
var variant = await varianttable.find();
var user = await usertable.find();
var product = await producttable.find();
var sale = await saletable.find();
var tansfer = await tansfertable.find();


** // paste data in database2**
try {
    await varianttable.create(variant[0])
    await usertable.create(user[0])
    await producttable.create(product[0])
    await saletable.create(sale[0])
    await tansfertable.create(tansfer[0])

} catch (error) {
    console.error(error);
}

что я хочу , так это если сервер завершил копирование данныхиз всей таблицы в database1, то он должен на 50% завершить процесс на стороне клиента, а после вставки данных в database2 индикатор выполнения должен показывать 100 завершенных на стороне клиента во время поиска в Google. Я обнаружил, что могу использовать socket.io, кто-нибудь может сказать мне, как я могу использоватьв приведенном выше коде или есть какой-либо альтернативный метод

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете использовать socket.io для достижения этой цели.

Что вам нужно сделать, создать канал для пользователя на socket.io и затем продвигать прогресс по этому каналу из серверной части.Также я бы предложил использовать следующий индикатор выполнения вместо прямого перехода к 50% и 100%.

// Push to client using socket.io (10%)
socket.emit('USER_CHANNEL_NAME', 10); ** // copy data from database1**
var variant = await varianttable.find();
var user = await usertable.find();
socket.emit('USER_CHANNEL_NAME', 25);
var product = await producttable.find();
var sale = await saletable.find();
var tansfer = await tansfertable.find();
socket.emit('USER_CHANNEL_NAME', 50);

** // paste data in database2**
try {
    await varianttable.create(variant[0])
    await usertable.create(user[0])
    await producttable.create(product[0])
    socket.emit('USER_CHANNEL_NAME', 70);
    await saletable.create(sale[0])
    socket.emit('USER_CHANNEL_NAME', 85);
    await tansfertable.create(tansfer[0])
    socket.emit('USER_CHANNEL_NAME', 100);
    // Here if you are sending response to server.
} catch (error) {
    console.error(error);
}

Довольно просто настроить socket.io, просто зайдите на их официальный сайт и руководство по началу работы, и выдолжно быть хорошо для его реализации.

Подробнее о socket.io на https://socket.io

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