V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mouyase
V2EX  ›  问与答

一个会出现部分完成的任务应该如何设计

  •  
  •   mouyase · 100 天前 via Android · 724 次点击
    这是一个创建于 100 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是前端,正常异步任务都是用 promise 处理,这玩意正常应该是有成功和失败两个状态



    但是现在有这么一个问题需要处理。



    有两个异步任务拼在一起的异步任务。

    有可能会出现一个成功,一个失败的情况。



    这种情况应该如何设计比较合理。



    理论上失败的时候是需要知道失败原因并做后续处理的。



    我目前的想法是全都失败算失败,不管成功还是失败都算成功,返回数据的同时,返回 code 和 msg 用来处理失败。

    然后只有异常的时候才返回失败。



    不知道这样是否合理。
    第 1 条附言  ·  100 天前
    这个问题的重点是怎样定义状态。
    因为同时会有两个成功,一个成功一个失败,全部失败三种状态。
    然后如何分配状态和 resolve ,reject 。
    7 条回复    2024-08-13 20:42:28 +08:00
    rrfeng
        1
    rrfeng  
       100 天前
    两个 promise 可以获取到 4 种状态啊,不是每种都可以处理吗?
    WhateverYouLike
        2
    WhateverYouLike  
       100 天前 via iPhone
    allSettled ,race ,any 选一个合适的。
    都要处理就 allsettled
    WhateverYouLike
        3
    WhateverYouLike  
       100 天前 via iPhone
    不好意思,你这两个异步任务是串行的还是并行的呢,我说的是并行的情况。
    mouyase
        4
    mouyase  
    OP
       100 天前
    @rrfeng 两个 promise 现在被包在同一个 promise 里了,所以一个成功一个失败的情况,我不知道如何设计会好一点
    mouyase
        5
    mouyase  
    OP
       100 天前
    @WhateverYouLike 是并行的
    sagaxu
        6
    sagaxu  
       100 天前
    部分成功的时候,有 3 个问题

    1. 技术上是否可重启失败的任务
    2. 业务逻辑上是否应该重试,重试几次,间隔多久
    3. 确定失败之后如何展示错误

    1 是开发决定,2 和 3 是产品决定,所以你在纠结什么?
    mouyase
        7
    mouyase  
    OP
       100 天前
    @sagaxu 你说的队,不是我该想的,不想了,统一都放 reslove 里了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:54 · PVG 00:54 · LAX 08:54 · JFK 11:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.