【问题标题】:Javascript completable future?Javascript 完整的未来?
【发布时间】:2021-10-15 20:20:00
【问题描述】:

我正在查看 PromiseJSES6 以查找类似于 CompletableFuture 的内容,但找不到任何内容。

有什么建议可以在 javascript 中实现吗?谢谢

注意:Promise.resolve() 不适合,除非您可以先创建Promise 对象,然后再完成。

更新

正如所有答案所指出的,正确的方法是使用Promise的构造函数:

new Promise((resolve, reject) => { resolve(data); })

【问题讨论】:

  • 是的,可以创建Promise 对象,然后在将来解析。您可以在问题中包含javascript 吗?描述预期结果?
  • 请向我们展示您想要编写的代码,我们可以告诉您如何正确执行。就目前而言,这确实不是一个非常具体的问题。
  • 以下是使用 ES6 标准 Promise 制作延迟对象的方法(如果您正在尝试这样做):stackoverflow.com/questions/37651780/…

标签: javascript promise future


【解决方案1】:

注意:Promise.resolve() 不合适,除非你可以创建 先 Promise 对象,然后再完成。

您可以使用Promise 构造函数,在executor 函数范围之外传递onFulfilledonRejected 参数

var complete, err, now = new Date().getTime();

var promise = new Promise((onFulfilled, onRejected) => {
  complete = onFulfilled; err = onRejected;
});

promise.then((data) => {
  console.log(data)
});

setTimeout(() => {
  complete("promise resolved " 
           + (new Date().getTime() - now) 
           + " in the future")
}, Math.random() * 3500)

【讨论】:

    【解决方案2】:

    在 JavaScript for good reason 中没有类似延迟的 API。您没有带有.complete 方法的CompletableFuture,而只需使用new Promise constructor。您已经链接了包含示例的some documentation,所以我不会在这里重复它们。

    【讨论】:

      【解决方案3】:

      满足同样的需求,我在 TypeScript 中就是这样做的

      export function createLazyPromise<T = any>(): Promise<T> & { reject: () => void, resolve: (v: T) => void } {
        let onResolve, onReject;
        const promise = new Promise<T>(((resolve, reject) => {
          onResolve = resolve;
          onReject = reject
        }));
        promise['resolve'] = onResolve;
        promise['reject'] = onReject;
        return promise as any
      }
      

      这样使用

      test('test shell', async () => {
        // resolve later
        const promise = createLazyPromise();
        const result = shell.exec(
          'ps aux | head -3',
          {
            silent: true,
          },
          (code, stdout, stderr) => {
            promise.resolve({code, stdout, stderr});
          }
        );
      
        console.log(result.pid);
      
        console.log(await promise);
      });
      

      【讨论】:

        猜你喜欢
        • 2015-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多