小编fjc*_*fjc的帖子

RXJS:SwitchMap意外地将字符串转换为单个字符

我正在玩RXJS for TypeScript,偶然发现了一个我自己无法解释的问题。我有一个observable发出多个字符串的。然后,我想将其应用于switchMap每个字符串前面的“ a”:

var o = Observable.create((observer) => {
    observer.next("hi")
    observer.next("bla")
})

o.switchMap(str => "a" + str).subscribe(str => console.log(str))
Run Code Online (Sandbox Code Playgroud)

我的预期输出:

ahi
abla
Run Code Online (Sandbox Code Playgroud)

实际输出:

a
h
i
a
b
l
a
Run Code Online (Sandbox Code Playgroud)

因此,在switchMap和subscription之间的某个位置,字符串显然被分解为字符。

有人可以解释为什么会这样吗?

observable rxjs typescript

9
推荐指数
1
解决办法
1496
查看次数

如何在Cordova的InAppBrowser中优雅地中断加载某个URL并在系统浏览器中打开它?

我正在使用Cordova的inappbrowser插件在我的应用程序中显示Web部件.在网站上,有共享链接,例如WhatsApp:

<a href="whatsapp://send?text=Check this out">Share on WhatsApp</a>
Run Code Online (Sandbox Code Playgroud)

现在,当在inappbrowser中单击这些链接时,它只是尝试加载whatsapp://send?...为URL并显示错误页面.

我想要做的是开放链接,首先whatsapp://使用给定系统的浏览器/ URI处理程序,因此它类似于在系统浏览器中单击此类链接时的行为.为此,我做了以下事情:

urlChanged = function(event) {
    // when a "whatsapp://" link is clicked, open it in the system browser
    if(event.url.startsWith("whatsapp://")) {
        window.open(event.url, "_system");
        return;
    } 
}
// Add an "loadstart" event listener to the inappbrowser:    
browser.addEventListener("loadstart", urlChanged);
Run Code Online (Sandbox Code Playgroud)

到目前为止,这有点奏效,但有些怪癖:

  1. 当用户单击WhatsApp链接(通过触发警报进行检查)时,事件立即触发,系统浏览器实际打开需要两到三秒钟.
  2. 在等待这2-3秒并返回应用程序时,用户会看到一个whatsapp://无法打开链接的inappbrowser错误页面("未知网址方案").

为了缓解第2点,我还在事件监听器中尝试了以下操作,但没有成功(行为完全相同):

urlChanged = function(event) {
    if(event.url.startsWith("whatsapp://")) {
        // stop loading the whatsapp:// link in inappbrowser
        browser.stop(); 
        // go back in history to display page where whatsapp:// …
Run Code Online (Sandbox Code Playgroud)

javascript cordova whatsapp inappbrowser

7
推荐指数
1
解决办法
2143
查看次数

提供给 combineLatest 的可观察对象的顺序是否相关?

我有两个可观察的对象,我想与之结合combineLatest

const o1 = from(['a', 'b', 'c']);
const o2 = of('content from o2');
combineLatest(o1, o2)
  .subscribe(result => console.log(result));
Run Code Online (Sandbox Code Playgroud)

据我了解combineLatest,当任何observable 发出时,它将结合所有 observable 的最新值并发出它们:

当任何 observable 发出一个值时,从每个 observable 发出最新的值。( https://www.learnrxjs.io/operators/combination/combinelatest.html )

但是,使用上面的代码,输出是:

["c", "content from o2"]
Run Code Online (Sandbox Code Playgroud)

所以只有在o2发出时,才会combineLatest发出一个值。

如果我切换我移交的顺序o1o2,它会按预期工作:

const o1 = from(['a', 'b', 'c']);
const o2 = of('content from o2');
combineLatest(o2, o1)
  .subscribe(result => console.log(result));
Run Code Online (Sandbox Code Playgroud)

输出:

["content from o2", "a"]
["content from o2", "b"]
["content from o2", "c"] …
Run Code Online (Sandbox Code Playgroud)

rxjs reactive

6
推荐指数
1
解决办法
1022
查看次数

Java:在原始线程的上下文中从另一个线程调用回调

我有点羞于问这个基本问题,但就是这样。

假设我有一个主类和一个工作线程。工作线程执行一些异步工作并将结果返回到主类的回调。

现在我正在努力解决的是:主类的回调作为工作线程的一部分执行。我已经这样做了十几次,它从未对我造成任何问题,但我想知道如何优雅地将响应从工作线程传递回实际的主线程。

我知道我可以使用Future等等FutureTask,但对我来说感觉很笨重。

例子:

class ThreadTest {
        private Runnable mRunnable;

        public ThreadTest() {
                System.out.println("ThreadTest(): thread " + Thread.currentThread().getId());
                mRunnable = new Runnable() {
                        public void run() {
                                System.out.println("run(): thread " + Thread.currentThread().getId());
                                print();
                        }
                };
                new Thread(mRunnable).start();
        }
        private void print() {
                System.out.println("print(): thread " + Thread.currentThread().getId());
        }
        public static void main(String... args) {
                System.out.println("main(): thread " + Thread.currentThread().getId());
                ThreadTest t = new ThreadTest();
        }
}
Run Code Online (Sandbox Code Playgroud)

输出:

main(): thread 1
ThreadTest(): thread 1
run(): thread …
Run Code Online (Sandbox Code Playgroud)

java multithreading thread-safety

5
推荐指数
1
解决办法
2936
查看次数

如果我不为 JobService 调用 jobFinished 会发生什么?

出于兴趣并更好地理解错误场景:我有一个JobService. 在onStartJob我返回true通知JobManager有额外的工作。Android 文档提到我需要打电话jobFinished通知JobManager工作已完成。

现在我想知道(并且可能有一个基于此的错误):如果我从不打电话会发生什么jobFinished?Android 会在某个时候终止作业服务吗?它会允许生成 JobService 的新实例吗?还是会阻止其他服务启动?是否有最大数量的 JobService 可以共存?

android jobservice

4
推荐指数
1
解决办法
1567
查看次数

使用Meteor开发真实生活体验

我正在开展一个项目,我们必须尽快决定是否投资当前的技术堆栈以改进它并使其更灵活地支持我们的上市时间(基于LAMP的堆栈)或是否更改为不同的堆栈希望它能使我们的开发更快,更有效,也可能更有趣.

我们正在研究的一个框架是Meteor.所以我想知道:有没有人有过将中型项目启动或转移到Meteor的真实生活经验(3个开发人员,几百个活跃用户,大多数是由所有用户查看的短暂的小块用户生成内容并需要立即更新)?您是否有关于可以分享的生产力,代码质量和代码效率的指标?或者只是总体感觉如何去?使用Meteor超过一周或两周时,你对Meteor有多高兴?如何在较长时间内保持可维护性?它的扩展程度如何?

非常感谢任何见解!

meteor

2
推荐指数
1
解决办法
564
查看次数