Replace all trivial Promise.defer usages with regular Promises

pull/21833/head
Michael Telatynski 2019-11-12 11:40:38 +00:00
parent cc9ef57f0e
commit 44401d73b4
5 changed files with 122 additions and 138 deletions

View File

@ -59,40 +59,38 @@ export class UploadCanceledError extends Error {}
* and a thumbnail key. * and a thumbnail key.
*/ */
function createThumbnail(element, inputWidth, inputHeight, mimeType) { function createThumbnail(element, inputWidth, inputHeight, mimeType) {
const deferred = Promise.defer(); return new Promise((resolve) => {
let targetWidth = inputWidth;
let targetHeight = inputHeight;
if (targetHeight > MAX_HEIGHT) {
targetWidth = Math.floor(targetWidth * (MAX_HEIGHT / targetHeight));
targetHeight = MAX_HEIGHT;
}
if (targetWidth > MAX_WIDTH) {
targetHeight = Math.floor(targetHeight * (MAX_WIDTH / targetWidth));
targetWidth = MAX_WIDTH;
}
let targetWidth = inputWidth; const canvas = document.createElement("canvas");
let targetHeight = inputHeight; canvas.width = targetWidth;
if (targetHeight > MAX_HEIGHT) { canvas.height = targetHeight;
targetWidth = Math.floor(targetWidth * (MAX_HEIGHT / targetHeight)); canvas.getContext("2d").drawImage(element, 0, 0, targetWidth, targetHeight);
targetHeight = MAX_HEIGHT; canvas.toBlob(function(thumbnail) {
} resolve({
if (targetWidth > MAX_WIDTH) { info: {
targetHeight = Math.floor(targetHeight * (MAX_WIDTH / targetWidth)); thumbnail_info: {
targetWidth = MAX_WIDTH; w: targetWidth,
} h: targetHeight,
mimetype: thumbnail.type,
const canvas = document.createElement("canvas"); size: thumbnail.size,
canvas.width = targetWidth; },
canvas.height = targetHeight; w: inputWidth,
canvas.getContext("2d").drawImage(element, 0, 0, targetWidth, targetHeight); h: inputHeight,
canvas.toBlob(function(thumbnail) {
deferred.resolve({
info: {
thumbnail_info: {
w: targetWidth,
h: targetHeight,
mimetype: thumbnail.type,
size: thumbnail.size,
}, },
w: inputWidth, thumbnail: thumbnail,
h: inputHeight, });
}, }, mimeType);
thumbnail: thumbnail, });
});
}, mimeType);
return deferred.promise;
} }
/** /**
@ -179,30 +177,29 @@ function infoForImageFile(matrixClient, roomId, imageFile) {
* @return {Promise} A promise that resolves with the video image element. * @return {Promise} A promise that resolves with the video image element.
*/ */
function loadVideoElement(videoFile) { function loadVideoElement(videoFile) {
const deferred = Promise.defer(); return new Promise((resolve, reject) => {
// Load the file into an html element
const video = document.createElement("video");
// Load the file into an html element const reader = new FileReader();
const video = document.createElement("video");
const reader = new FileReader(); reader.onload = function(e) {
reader.onload = function(e) { video.src = e.target.result;
video.src = e.target.result;
// Once ready, returns its size // Once ready, returns its size
// Wait until we have enough data to thumbnail the first frame. // Wait until we have enough data to thumbnail the first frame.
video.onloadeddata = function() { video.onloadeddata = function() {
deferred.resolve(video); resolve(video);
};
video.onerror = function(e) {
reject(e);
};
}; };
video.onerror = function(e) { reader.onerror = function(e) {
deferred.reject(e); reject(e);
}; };
}; reader.readAsDataURL(videoFile);
reader.onerror = function(e) { });
deferred.reject(e);
};
reader.readAsDataURL(videoFile);
return deferred.promise;
} }
/** /**
@ -236,16 +233,16 @@ function infoForVideoFile(matrixClient, roomId, videoFile) {
* is read. * is read.
*/ */
function readFileAsArrayBuffer(file) { function readFileAsArrayBuffer(file) {
const deferred = Promise.defer(); return new Promise((resolve, reject) => {
const reader = new FileReader(); const reader = new FileReader();
reader.onload = function(e) { reader.onload = function(e) {
deferred.resolve(e.target.result); resolve(e.target.result);
}; };
reader.onerror = function(e) { reader.onerror = function(e) {
deferred.reject(e); reject(e);
}; };
reader.readAsArrayBuffer(file); reader.readAsArrayBuffer(file);
return deferred.promise; });
} }
/** /**
@ -461,33 +458,34 @@ export default class ContentMessages {
content.info.mimetype = file.type; content.info.mimetype = file.type;
} }
const def = Promise.defer(); const prom = new Promise((resolve) => {
if (file.type.indexOf('image/') == 0) { if (file.type.indexOf('image/') == 0) {
content.msgtype = 'm.image'; content.msgtype = 'm.image';
infoForImageFile(matrixClient, roomId, file).then((imageInfo)=>{ infoForImageFile(matrixClient, roomId, file).then((imageInfo)=>{
extend(content.info, imageInfo); extend(content.info, imageInfo);
def.resolve(); resolve();
}, (error)=>{ }, (error)=>{
console.error(error); console.error(error);
content.msgtype = 'm.file';
resolve();
});
} else if (file.type.indexOf('audio/') == 0) {
content.msgtype = 'm.audio';
resolve();
} else if (file.type.indexOf('video/') == 0) {
content.msgtype = 'm.video';
infoForVideoFile(matrixClient, roomId, file).then((videoInfo)=>{
extend(content.info, videoInfo);
resolve();
}, (error)=>{
content.msgtype = 'm.file';
resolve();
});
} else {
content.msgtype = 'm.file'; content.msgtype = 'm.file';
def.resolve(); resolve();
}); }
} else if (file.type.indexOf('audio/') == 0) { });
content.msgtype = 'm.audio';
def.resolve();
} else if (file.type.indexOf('video/') == 0) {
content.msgtype = 'm.video';
infoForVideoFile(matrixClient, roomId, file).then((videoInfo)=>{
extend(content.info, videoInfo);
def.resolve();
}, (error)=>{
content.msgtype = 'm.file';
def.resolve();
});
} else {
content.msgtype = 'm.file';
def.resolve();
}
const upload = { const upload = {
fileName: file.name || 'Attachment', fileName: file.name || 'Attachment',
@ -509,7 +507,7 @@ export default class ContentMessages {
dis.dispatch({action: 'upload_progress', upload: upload}); dis.dispatch({action: 'upload_progress', upload: upload});
} }
return def.promise.then(function() { return prom.then(function() {
// XXX: upload.promise must be the promise that // XXX: upload.promise must be the promise that
// is returned by uploadFile as it has an abort() // is returned by uploadFile as it has an abort()
// method hacked onto it. // method hacked onto it.

View File

@ -312,18 +312,14 @@ async function _restoreFromLocalStorage(opts) {
function _handleLoadSessionFailure(e) { function _handleLoadSessionFailure(e) {
console.error("Unable to load session", e); console.error("Unable to load session", e);
const def = Promise.defer();
const SessionRestoreErrorDialog = const SessionRestoreErrorDialog =
sdk.getComponent('views.dialogs.SessionRestoreErrorDialog'); sdk.getComponent('views.dialogs.SessionRestoreErrorDialog');
Modal.createTrackedDialog('Session Restore Error', '', SessionRestoreErrorDialog, { const modal = Modal.createTrackedDialog('Session Restore Error', '', SessionRestoreErrorDialog, {
error: e.message, error: e.message,
onFinished: (success) => {
def.resolve(success);
},
}); });
return def.promise.then((success) => { return modal.finished.then(([success]) => {
if (success) { if (success) {
// user clicked continue. // user clicked continue.
_clearStorage(); _clearStorage();

View File

@ -26,6 +26,7 @@ import { Room } from 'matrix-js-sdk';
import SettingsStore from "../../../settings/SettingsStore"; import SettingsStore from "../../../settings/SettingsStore";
import Autocompleter from '../../../autocomplete/Autocompleter'; import Autocompleter from '../../../autocomplete/Autocompleter';
import {sleep} from "../../../utils/promise";
const COMPOSER_SELECTED = 0; const COMPOSER_SELECTED = 0;
@ -105,13 +106,11 @@ export default class Autocomplete extends React.Component {
autocompleteDelay = 0; autocompleteDelay = 0;
} }
const deferred = Promise.defer(); return new Promise((resolve) => {
this.debounceCompletionsRequest = setTimeout(() => { this.debounceCompletionsRequest = setTimeout(() => {
this.processQuery(query, selection).then(() => { resolve(this.processQuery(query, selection));
deferred.resolve(); }, autocompleteDelay);
}); });
}, autocompleteDelay);
return deferred.promise;
} }
processQuery(query, selection) { processQuery(query, selection) {
@ -197,16 +196,16 @@ export default class Autocomplete extends React.Component {
} }
forceComplete() { forceComplete() {
const done = Promise.defer(); return new Promise((resolve) => {
this.setState({ this.setState({
forceComplete: true, forceComplete: true,
hide: false, hide: false,
}, () => { }, () => {
this.complete(this.props.query, this.props.selection).then(() => { this.complete(this.props.query, this.props.selection).then(() => {
done.resolve(this.countCompletions()); resolve(this.countCompletions());
});
}); });
}); });
return done.promise;
} }
onCompletionClicked(selectionOffset: number): boolean { onCompletionClicked(selectionOffset: number): boolean {

View File

@ -178,17 +178,12 @@ module.exports = createReactClass({
}, },
_optionallySetEmail: function() { _optionallySetEmail: function() {
const deferred = Promise.defer();
// Ask for an email otherwise the user has no way to reset their password // Ask for an email otherwise the user has no way to reset their password
const SetEmailDialog = sdk.getComponent("dialogs.SetEmailDialog"); const SetEmailDialog = sdk.getComponent("dialogs.SetEmailDialog");
Modal.createTrackedDialog('Do you want to set an email address?', '', SetEmailDialog, { const modal = Modal.createTrackedDialog('Do you want to set an email address?', '', SetEmailDialog, {
title: _t('Do you want to set an email address?'), title: _t('Do you want to set an email address?'),
onFinished: (confirmed) => {
// ignore confirmed, setting an email is optional
deferred.resolve(confirmed);
},
}); });
return deferred.promise; return modal.finished.then(([confirmed]) => confirmed);
}, },
_onExportE2eKeysClicked: function() { _onExportE2eKeysClicked: function() {

View File

@ -105,26 +105,22 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
} }
function _submitReport(endpoint, body, progressCallback) { function _submitReport(endpoint, body, progressCallback) {
const deferred = Promise.defer(); return new Promise((resolve, reject) => {
const req = new XMLHttpRequest();
const req = new XMLHttpRequest(); req.open("POST", endpoint);
req.open("POST", endpoint); req.timeout = 5 * 60 * 1000;
req.timeout = 5 * 60 * 1000; req.onreadystatechange = function() {
req.onreadystatechange = function() { if (req.readyState === XMLHttpRequest.LOADING) {
if (req.readyState === XMLHttpRequest.LOADING) { progressCallback(_t("Waiting for response from server"));
progressCallback(_t("Waiting for response from server")); } else if (req.readyState === XMLHttpRequest.DONE) {
} else if (req.readyState === XMLHttpRequest.DONE) { // on done
on_done(); if (req.status < 200 || req.status >= 400) {
} reject(new Error(`HTTP ${req.status}`));
}; return;
req.send(body); }
return deferred.promise; resolve();
}
function on_done() { };
if (req.status < 200 || req.status >= 400) { req.send(body);
deferred.reject(new Error(`HTTP ${req.status}`)); });
return;
}
deferred.resolve();
}
} }