Цепные обещания потом возвращаются наблюдаемым

, как указано другими, существует возможное дублирование с более ранним вопросом. Однако, пожалуйста, см. Фрагмент кода ниже. Вам не нужно получать длину текста, который вы добавляете, чтобы изменить его форматирование, просто установите формат перед добавлением. Это (я думаю) дает лучшую производительность, если у вас много текста в текстовом поле.

Это будет работать до тех пор, пока пользователь не будет выбирать в текстовом поле, тогда произойдет странное, что я не могу объяснить. Может быть, кто-то еще может просветить нас? Та же проблема возникает с решением, предложенным в Измените цвет текста в WinForms RichTextBox . Я заменил «:», который у вас был после имени пользователя, чтобы просто получить образец кода для работы с тегом DateTime, это можно легко изменить в «Split».

       private void AddText(string text)
    {
        string[] str = text.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);

        if (str.Length == 2)
        {
            richTextBox1.DeselectAll();
            richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Bold);
            richTextBox1.AppendText(Environment.NewLine + str[0] + ";");
            richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Regular);
            richTextBox1.AppendText(str[1]);
        } // Else?? Well, do something else..
    }

И вызов:

        private void button1_Click(object sender, EventArgs e)
    {
        AddText(DateTime.Now.ToString() + " - Mike; Did something");

    }

0
задан Alston Sahyun Kim 1 March 2019 в 02:40
поделиться

1 ответ

Вы можете использовать оператор from из RxJs, который преобразует любое Обещание в Observable и далее связывает его (возможно, используя flatMap). См. https://www.learnrxjs.io/operators/creation/from.html

Подобные вопросы отвечают здесь:

Возврат Наблюдаемый внутри Обещания

Как вернуть Observable после разрешения Promise в Ionic 2 / Angular 2? (упомянутый здесь оператор fromPromise должен быть заменен новым оператором from) [ 1118]

Другой вариант - использовать async await ключевые слова в Typesript / ES6. Везде, где вы вызываете метод uploadFile, просто используйте (await uploadFile(formInstanceId, questionId, repeatId, filePath, isEquipment)), который будет возвращать наблюдаемую, которая была возвращена методом networkService.postFile().

Ваш метод станет:

 public async uploadFile(formInstanceId, questionId, repeatId, filePath, isEquipment): Promise<Observable<any>> {

    const result = await this._file.resolveLocalFilesystemUrl(filePath);
    console.log("fileSelected", result);

    let fileName = result.name;
    let nativeURL = result.nativeURL;
    let path = nativeURL.substring(0, nativeURL.lastIndexOf("/"));

    const buffer = await this._file.readAsArrayBuffer(path, fileName);
    let imgBlob = new Blob([buffer], {type: "image/jpeg"});

    let params = {fileName: 'attachment'};
    let query = this.encodeQueryData(params);

    let uploadFileURL = this._networkService.serverUrl + '/api/upload?' + query;

    return this._networkService.postFile(uploadFileURL, fileName, imgBlob).pipe(map(response => {
        console.log(response);
        return {
        formInstanceId: formInstanceId,
        questionId: questionId,
        repeatId: repeatId,
        filename: response[0].filepath,
        isEquipment: isEquipment
        };
    },
    error => {
        return throwError(error);
    }
    ));
}

Вот как вы его потребляете:

(await uploadFile(formInstanceId, questionId, repeatId, filePath, isEquipment)).subscribe(result=> { /* ...Your code here... */ });

Ссылка на асинхронное ожидание: https://www.typescriptlang.org /docs/handbook/release-notes/typescript-1-7.html

0
ответ дан Rushikesh Kshirsagar 1 March 2019 в 02:40
поделиться
Другие вопросы по тегам:

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