小编Mat*_*res的帖子

返回承诺内部解析函数作为其延续

上下文

我正在和Angular合作.我有一个名为UserService服务,用于处理登录,身份验证和用户数据请求.

GET方法需要检查用户是否有一个有效的(未过期)认证使得之前令牌get请求.因此,如果有,则发出请求,如果没有,请求令牌然后发出请求.

问题

get方法需要隐藏其复杂请求.它必须只返回一个Promise,因为它只发出一个请求.

所以,一个用法的例子:

UserService
    .get()
    .then(data => { ... })
    .catch(error => { ... })
Run Code Online (Sandbox Code Playgroud)

错误的解决方案

检查令牌是否已过期.如果是,则返回刷新令牌的请求,然后生成并返回get请求.如果不是,只需创建并返回get请求.如下:

function get() {
    if (isTokenExpired(token))
        return $http
            .post(url + '/refreshtoken', 'token=' + refreshToken)
            .then(response => {
                token = response.data.token
                return $http.get(url + '?token=' + token)
            })
            .catch(response => { ... })
    else
        return $http.get(url + '?token=' + token)
}
Run Code Online (Sandbox Code Playgroud)

但它正在回复我将要处理的承诺:

UserService
    .get()
    .then(request => {
        request // THAT …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous angularjs

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

上传 base64 编码的图像是一种不好的做法吗?

使用base64编码上传(只上传)图片到服务器有问题吗?考虑到大约 1-2 MB 的常见图像大小,而不是图标大小的图像。这是一种不好的做法吗?它应该总是使用表单数据来上传图片吗?

图像将在 POST 正文(JSON 内容类型)中与其他数据一起发送,例如:

// POST /signup
{
  email: 'example@email.com',
  password: 'example@email.com',
  name: 'Example Name',
  picture: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAA...',
}
Run Code Online (Sandbox Code Playgroud)

一旦进入服务器,它将被发送到 AWS 存储桶并作为二进制文件提供,而不是 base64 编码的字符串。

rest upload base64 backend

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

如何使布局填充空间,直到底部的另一个布局

Ilutration:

"----"表示布局区域

"...."表示另一个布局区域

<-------------------->
<----<TextView_1>---->
<-------------------->
<-<..<TextView_a...>-> 
<-<...          ...>->
<-<...          ...>->
<-<...         >...>->
<-<................>->
<-<................>->
<-<................>->
<-<..*layout_end*..>->
<-------------------->
<----<TextView_2----->
<-----         >----->
<-------------------->
Run Code Online (Sandbox Code Playgroud)

的内容"......"布局只是TextView_a,是不是足够大,以填补直到*layout_end*.

如果我在"...."布局中放置match_parent,则不会显示TextView_2.像这样:

<-------------------->
<----<TextView_1>---->
<-------------------->
<-<..<TextView_a...>-> 
<-<...          ...>->
<-<...          ...>->
<-<...        />...>->
<-<................>->
<-<................>->
<-<................>->
<-<................>->
<-<................>->
<-<................>->
<-<................>->
<-<..*layout_end*..>->
Run Code Online (Sandbox Code Playgroud)

我需要"...."布局填充空间,但为TextView_2留出一个空间.我能做些什么才能获得高效率?结果:

<-------------------->
<----<TextView_1>---->
<-------------------->
<-<..<TextView_a...>-> 
<-<...          ...>->
<-<...          ...>->
<-<...         >...>->
<-<................>->
<-<................>->
<-<................>->
<-<..*layout_end*..>->
<-------------------->
<----<TextView_2----->
<-----         >----->
<--------------------> …
Run Code Online (Sandbox Code Playgroud)

layout android android-layout

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

对于具有多个字段的活动,应如何实现ViewModel

问题

有一个SettingsActivity带有大约10个文本字段和3个按钮的设置屏幕()。文本字段在onClick打开对话框以插入/编辑文本时,其内容保存在中SharedPreferences。这些按钮执行异步请求以检索内容并将其保存在其他位置。在请求期间,将显示一个对话框以通知进度。

初始解决方案

资料储存库

基本上,是SharedPreferences的包装,它具有10个getter和10 setter,每个字段一个。在上get[field_name],从上DataRepository获取值,SharedPreferences然后在上set[field_name]提交SharedPreferences

视图模型

ViewModel,其具有10度MutableLiveData的目的,一个用于每个字段。此类实现了LifecycleObserver有关SettingsActivity生命周期的信息,因此可以从上加载存储库中onCreate的字段并将字段保存到上的存储库中onDestroy

还有3种方法来执行由上述3个按钮触发的3个异步请求。每个方法都接收一个OnRequestProgressListener实例,该实例将传递给发出异步请求的类,该类将用于将视图通知进度。

视图

有10场的活动,即观察10 MutableLiveDataViewModel。在onClick每个字段中,打开一个对话框以编辑/插入文本。在onPositiveButton对话框的上,将调用相应字段的观察者。

该活动OnRequestProgressListener根据异步请求的进度实现显示和隐藏对话框。

最初的解决问题

上述设计似乎不正确。我可以指出一些:

  • 10 MutableLiveDataViewModel;
  • 10个getter和10个setter DataRepository;
  • 的存储库SharedPreferences
  • 所述ViewModel接收听众传递给做,采用这些听众来通知视图异步请求的类。都ViewModel在中间。

正确的解决方案

那是正确的解决方案吗?如果不是,我认为不是,应该如何设计正确的解决方案?

architecture android mvvm android-livedata android-architecture-components

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

头文件中const变量的多重定义

我在flag.h中定义了一些常量,所以link.clinkedlist.h可以使用它.但是当我编译时:

clang -Wall main.c link.c linkedlist.c

我得到以下内容

/tmp/linkedlist-o2mcAI.o:(.rodata+0x0):`的多个定义VARIABLE_NAME '

/tmp/link-oXhyfE.o:(.rodata+0x0):首先在这里定义

从所有变量flag.h中使用link.clinkedlist.c,并在最后:

clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)


main.c,flag.h,link.h,link.c,linkedlist.hlinkedlist.c的示例代码:

main.c中

#include <stdio.h>
#include "linkedlist.h"

int main(void) {
    LinkedList* list = LinkedList_new();
}
Run Code Online (Sandbox Code Playgroud)

flag.h

#ifndef FLAG_H_
#define FLAG_H_

#include <limits.h>

#define FALSE 0
#define TRUE 1

const int OK = 1;
const int ERROR = -1;
const int FLAG = 0;

// other …
Run Code Online (Sandbox Code Playgroud)

c linker compiler-errors header-files

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

求解伊莎贝尔中的 ~(P /\ Q) |- Q -&gt; ~P

〜(P /\ Q) |- Q -> 〜P

我不知道从哪里开始。否定让我困惑。

我必须在 Isabelle(一个程序)中解决这个问题,但是如果有人解释如何使用自然演绎来解决这个问题,那将有足够的帮助。

logic isabelle

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