小编And*_*ton的帖子

在Javascript中通过一系列承诺传递状态有哪些模式?

我正在尝试学习一些关于Node和异步编程的知识.我读到了Promises,并试图在一个小项目中使用它们,这个项目将用户的帖子从服务A复制到服务B.我在理解如何最好地在Promises之间传递状态时遇到一些麻烦

该项目是使用Promise库为NodeJS编写的

我当前问题的一个简单定义是:

  • 如果服务B中尚不存在帖子,则将用户的帖子从服务A复制到服务B.
  • 这两种服务都提供http API,需要一个不易记忆的用户ID来查找该用户的帖子,因此必须从用户名中查找用户ID.
  • 所有的http调用都是异步的.

这是一些伪代码,说明了我如何将Promise链接在一起.

Promise.from('service_A_username')
  .then(getServiceAUserIdForUsername)
  .then(getServiceAPostsForUserId)
  .then(function(serviceAPosts) {
    // but what? store globally for access later?
    doSomethingWith(serviceAPosts);
    return Promise.from('service_B_username');
  })
  .then(getServiceBUserIdForUsername)
  .then(getServiceBPostsForUserId)
  .done(function(serviceBPosts) {
    // how do we interact with Service A posts?
    doSomethingThatInvolvesServiceAPostsWith(serviceBPosts); 
  });
Run Code Online (Sandbox Code Playgroud)

我想过要做的一些事情:

  1. 将getIdForUsername调用带入getPostsForUserId函数.但是,我希望保持每个功能单元尽可能简单,遵循"做一件事,做得好"的原则.
  2. 创建一个"上下文"对象并将其传递给整个链,在此对象中读取和存储状态.然而,这种方法使得每个功能都非常适用于链条,因此难以单独使用.

还有其他选择,建议采用什么方法?

javascript asynchronous chaining node.js promise

9
推荐指数
2
解决办法
1353
查看次数

指定的初始化器可以合法地引用它在 C99 中初始化的变量吗?

GCC 和 Clang 都允许指定的初始化器引用正在初始化的结构或数组的成员,但是这是合法且定义良好的行为吗?

以下代码示例针对 GCC 和 Clang 进行编译和运行,并{ .a = 3, .b = 6, }在两种情况下输出:

#include <stdio.h>

typedef struct
{
    int a;
    int b;
} foo;

int main()
{
    foo bar = {
        .a = 3,
        .b = bar.a + 3,
    };
    printf("{ .a = %d, .b = %d, }\n", bar.a, bar.b);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC 为指定的初始化生成以下输出(编译器资源管理器链接),这表明该示例的操作是安全的:

mov     dword ptr [rbp - 4], 0
mov     dword ptr [rbp - 16], 3
mov     eax, dword ptr …
Run Code Online (Sandbox Code Playgroud)

c initialization c99 designated-initializer c11

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