& ldquo; RuntimeException: нельзя создать собственную гарнитуру & rdquo; при загрузке шрифта

Обновление 2017: я бы использовал функцию async, если среда поддерживает ее:

async function readFiles(files) {
  for(const file of files) {
    await readFile(file);
  }
};

Если вы хотите, вы можете отложить чтение файлов до тех пор, пока они вам не понадобятся с помощью генератора асинхронных ваша среда поддерживает его):

async function* readFiles(files) {
  for(const file of files) {
    yield await readFile(file);
  }
};

Обновление: во второй мысли я мог бы использовать цикл for вместо:

var readFiles = function(files) {
  var p = Q(); // Promise.resolve() without Q

  files.forEach(function(file){
      p = p.then(function(){ return readFile(file); }); // or .bind
  });
  return p;
};

Или более компактно, с уменьшением:

var readFiles = function(files) {
  return files.reduce(function(p, file) {
             return p.then(function(){ return readFile(file); });
         },Q()); // initial
};

В других библиотеках обещаний (например, когда и Bluebird) у вас есть утилиты для этого.

Например, Bluebird будет:

var Promise = require("bluebird");
var fs = Promise.promisifyAll(require("fs"));

var readAll = Promise.resolve(files).map(fs.readFileAsync,{concurrency: 1 });
// if the order matters, you can use Promise.each instead and omit concurrency param

readAll.then(function(allFileContents){
    // do stuff to read files.
});

В Q у вас есть так же хорошо, как вы можете получить - вы можете немного сократить его с помощью Array.prototype.reduce и извлечь его в общий метод.

Если вы можете использовать Q.async (это вы на узле) все становится лучше:

Q.spawn(function* () {
    var results = [];
    for(var i = 0;i < files.length; i++){
        results.push(yield readFile(files[i]));
    }
    console.log(results);
});

Просто не забудьте запустить узел с --harmony и запомнить его экспериментальный atm.

64
задан BSMP 27 October 2018 в 06:09
поделиться

1 ответ

Android не поддерживает OpenType (OTF), только TrueType (TTF), поэтому ваш шрифт Molot.otf , вероятно, не будет работать. Я написал оба сообщения в блоге, на которые вы ссылаетесь во вступительном предложении (одно является пиратской копией другого), и они не используют Molot.otf .

(Кстати, я несколько поправил форматирование этого поста - AndroidGuys постоянно меняет хосты WordPress, поэтому мои старые посты ужасно сломаны с точки зрения форматирования).

РЕДАКТИРОВАТЬ : Как указано в комментариях, Android DOES теперь поддерживает OTF.

48
ответ дан 24 November 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: