Я использую контекст Canvas 2d для вычисления ширины текста.
Бывший:canvas2DContext.measureText('Sivakumar Tadisetti')
Я использую шрифт как bold 15px "Open Sans", serif
Проблема: Иногда measureText() дает 119.4835, а иногда 115.3423 ширину.
Почему я получаю разную ширину. Что я здесь делаю неправильно? Пожалуйста, найдите фрагмент ниже.
var canvas = document.createElement('canvas');
var canvas2DContext = canvas.getContext('2d');
var textWidth = canvas2DContext.measureText("Sivakumar Tadisetti").width;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Немного слепой выстрел, но для меня это звучит так, как будто вы не ждете загрузки вашего шрифта должным образом:
const ctx = canvas.getContext('2d');
ctx.font = 'bold 15px "Open Sans", serif'
const before_load = ctx.measureText("Sivakumar Tadisetti").width;
console.info('before', before_load);
// load the font
document.fonts.ready
.then(() => {
ctx.font = 'bold 15px "Open Sans", serif'
const after_load = ctx.measureText("Sivakumar Tadisetti").width;
console.info('after', after_load);
});<link href = "https://fonts.googleapis.com/css?family=Open+Sans" rel = "stylesheet">
<canvas id = "canvas"></canvas>Чтобы избежать этого, вы можете выполнить свой код в обратном вызове обещания document.fonts.ready:
document.fonts.ready.then(startYourCode);
document.fonts.ready.then(() => {
const ctx = canvas.getContext('2d');
ctx.font = 'bold 15px "Open Sans", serif'
const textWidth= ctx.measureText("Sivakumar Tadisetti").width;
console.info(textWidth);
});#canvas { font-family: "Open Sans"; }<link href = "https://fonts.googleapis.com/css?family=Open+Sans" rel = "stylesheet">
<canvas id = "canvas"></canvas>
Понял... спасибо, но почему это происходит только с некоторыми текстами. Пример: в массиве текстов только для некоторых текстов неправильная ширина