小编JCa*_*los的帖子

用于Retrofit 2的定制转换器

我必须处理动态JSON响应.

之前,我正在使用类和注释如下:

public class ChatResponse {

    @SerializedName("status")
    private int status;

    @SerializedName("error")
    private String error;

    @SerializedName("response")
    private Talk response;

    public int getStatus() {
        return status;
    }

    public String getError() {
        return error;
    }

    public Talk getResponse() {
        return response;
    }
}
Run Code Online (Sandbox Code Playgroud)

当状态为1(成功)时,onResponse会触发,我可以获得ChatResponse对象.但是,当状态为0时,JSON表示中的响应为false,并且失败(onFailure被触发).

我想创建我的自定义转换器,这个问题有一个很好的例子,但该示例适用于Retrofit 1.

我必须创建一个扩展的类Converter.Factory,但我不知道如何覆盖此类的方法.

其实我有下一个:

@Override
public Converter<ResponseBody, ?> fromResponseBody(Type type, Annotation[] annotations) {

    return super.fromResponseBody(type, annotations);
}

@Override
public Converter<?, RequestBody> toRequestBody(Type type, Annotation[] annotations) {

    return super.toRequestBody(type, annotations);
} …
Run Code Online (Sandbox Code Playgroud)

android json converter retrofit2

21
推荐指数
2
解决办法
3万
查看次数

了解docker -v命令

我刚刚在youtube上阅读教程并尝试解释使用-v命令,IE为什么教程中的人使用-v命令?他使用命令,像这样,

docker run -v /var/lib/mysql --name=my_datastore -d busybox echo "my datastore"
Run Code Online (Sandbox Code Playgroud)

现在我理解IE上面的命令

my datastore 
Run Code Online (Sandbox Code Playgroud)

为容器指定一个特定名称.

-v /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

上面的命令搜索busybox图像,如果没有找到它将从中拉出-v并在后台作为守护进程运行它.

执行run命令后,下面的行将回显到控制台.

docker run -v /var/lib/mysql --name=my_datastore -d busybox echo "my datastore"
Run Code Online (Sandbox Code Playgroud)

现在我不理解的部分如下:

my datastore 
Run Code Online (Sandbox Code Playgroud)

为什么-v这里使用的命令以及--name=my_datastore指定路径的原因是什么?我很难理解为什么使用上述行以及在什么情况下使用?谁能解释一下?

docker docker-volume

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

如何在不使用then方法的情况下定义promise链

我已经找了类似的问题,但它们与JQuery或任何其他库有关.

首先,我写了这个:

const printIn1Sec = (value) => {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(value);
      resolve();
    }, 1000)
  });
};
Run Code Online (Sandbox Code Playgroud)

并以这种方式使用它:

printIn1Sec(1)
.then(() => printIn1Sec(2))
.then(() => printIn1Sec(3));
Run Code Online (Sandbox Code Playgroud)

我认为then非常重要,因为它允许我们在承诺得到解决后立即执行.

但我正在寻找这样的事情:

printIn1Sec(1)
.printIn1Sec(2)
.printIn1Sec(3);
Run Code Online (Sandbox Code Playgroud)

我注意到我需要一个可以访问此printIn1Sec方法的对象.所以我定义了一个类:

class Printer extends Promise {
  in1Sec(v) {
    return this.then(() => this.getPromise(v));
  }

  getPromise(value) {
    return new Printer(resolve => {
      setTimeout(() => {
        console.log(value);
        resolve();
      }, 1000)
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

并以这种方式使用它:

Printer.resolve().in1Sec(1).in1Sec(2).in1Sec(3);
Run Code Online (Sandbox Code Playgroud)

resolve从一开始就不得不承诺,以便开始连锁.但它仍然困扰着我.

您认为,有没有办法让它像以下一样工作?

printIn1Sec(1).printIn1Sec(2).printIn1Sec(3);
Run Code Online (Sandbox Code Playgroud)

我正在考虑一个新的类或方法,它可以接收这些值,存储它们,最后开始解析链.但它需要在最后调用aditional方法,以init为流程.

javascript ecmascript-6 es6-promise

7
推荐指数
2
解决办法
122
查看次数