相关疑难解决方法(0)

什么是明确的承诺构建反模式,我该如何避免它?

我编写的代码看起来像:

function getStuffDone(param) {           | function getStuffDone(param) {
    var d = Q.defer(); /* or $q.defer */ |     return new Promise(function(resolve, reject) {
    // or = new $.Deferred() etc.        |     // using a promise constructor
    myPromiseFn(param+1)                 |         myPromiseFn(param+1)
    .then(function(val) { /* or .done */ |         .then(function(val) {
        d.resolve(val);                  |             resolve(val);
    }).catch(function(err) { /* .fail */ |         }).catch(function(err) {
        d.reject(err);                   |             reject(err);
    });                                  |         });
    return d.promise; /* or promise() */ |     });
}                                        | }
Run Code Online (Sandbox Code Playgroud)

有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …

javascript promise q bluebird es6-promise

479
推荐指数
3
解决办法
7万
查看次数

有没有办法判断ES6承诺是否已完成/拒绝/已解决?

我习惯了Dojo的承诺,我可以做以下事情:

promise.isFulfilled();
promise.isResolved();
promise.isRejected();
Run Code Online (Sandbox Code Playgroud)

有没有办法确定ES6承诺是否得到满足,解决或拒绝?如果没有,有没有办法填写使用该功能Object.defineProperty(Promise.prototype, ...)

javascript promise ecmascript-6

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

如何检查Promise是否有待处理

我有这种情况,我想知道一个承诺的状态.下面,该函数startsomeTest在它不再运行时调用(Promise未挂起).该start函数可以多次调用,但如果在测试仍在运行时调用它,它将不会等待并返回false

class RunTest {
    start() {
         retVal = false;

         if (!this.promise) {
             this.promise = this.someTest();
             retVal = true;                
         }

         if ( /* if promise is resolved/rejected or not pending */ ) {
             this.promise = this.someTest();
             retVal = true;
         }

         return retVal;
    }

    someTest() {
        return new Promise((resolve, reject) => {
            // some tests go inhere
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我找不到简单检查承诺状态的方法.喜欢的东西this.promise.isPending会很好:)任何帮助将不胜感激!

javascript promise ecmascript-6 es6-promise

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

如何在我的javascript代码中找到未实现的promise的出现?

假设我在我的javascript代码async function doSomething() {}和其他地方的某处我调用此函数而不试图实现它.

只是doSomething();await doSomething().(两者都没有doSomething().then()).我如何找到所有这些事件?

我只花了10个小时追逐一个未知的承诺,由于await在函数调用之前丢失了一些随机点.我希望有办法找到它们.

javascript promise async-await

6
推荐指数
0
解决办法
93
查看次数

为什么Promise没有get()函数?

如果你知道Promise已经解决了,为什么你不能只是召唤get()它并获得价值?then(..)与使用回调函数相反.

所以不要这样做:

promise.then(function(value) {
  // do something with value
});
Run Code Online (Sandbox Code Playgroud)

我希望能够做得更简单:

var value = promise.get();
Run Code Online (Sandbox Code Playgroud)

Java为它的CompletableFuture提供了这个,我认为没有理由不能提供相同的JavaScript.

javascript promise

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

覆盖 console.log 时如何显示 Promise 对象的状态和值

console.log我正在尝试在 div 中显示输出。我通过重写console.log函数来做到这一点

当我使用原始的 时console.log,控制台中会显示一个承诺(请参见下面代码中的 1.):

Promise { <state>: "fulfilled", <value>: undefined }
Run Code Online (Sandbox Code Playgroud)

当我覆盖它时,我在 div: 中得到:

 [object Promise]
Run Code Online (Sandbox Code Playgroud)

(参见下面代码中的2.)

您将如何调整以下代码以使该<state>属性显示在“main”div 中?

Promise { <state>: "fulfilled", <value>: undefined }
Run Code Online (Sandbox Code Playgroud)
 [object Promise]
Run Code Online (Sandbox Code Playgroud)

关于我为什么要问的说明:我的代码承诺在桌面浏览器中解析,而不是在移动浏览器中解析。我尝试对此进行调试(没有一致的移动桌面操作系统生态系统)。如果我可以在一个简单的例子中复制它,我可能会写一个后续问题。

html javascript overriding promise console.log

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