我编写的代码看起来像:
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构造函数反模式 ",这个代码有什么不好,为什么这被称为 …
我习惯了Dojo的承诺,我可以做以下事情:
promise.isFulfilled();
promise.isResolved();
promise.isRejected();
Run Code Online (Sandbox Code Playgroud)
有没有办法确定ES6承诺是否得到满足,解决或拒绝?如果没有,有没有办法填写使用该功能Object.defineProperty(Promise.prototype, ...)?
我有这种情况,我想知道一个承诺的状态.下面,该函数start仅someTest在它不再运行时调用(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代码async function doSomething() {}和其他地方的某处我调用此函数而不试图实现它.
只是doSomething();不await doSomething().(两者都没有doSomething().then()).我如何找到所有这些事件?
我只花了10个小时追逐一个未知的承诺,由于await在函数调用之前丢失了一些随机点.我希望有办法找到它们.
如果你知道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.
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)
关于我为什么要问的说明:我的代码承诺在桌面浏览器中解析,而不是在移动浏览器中解析。我尝试对此进行调试(没有一致的移动桌面操作系统生态系统)。如果我可以在一个简单的例子中复制它,我可能会写一个后续问题。
javascript ×6
promise ×6
ecmascript-6 ×2
es6-promise ×2
async-await ×1
bluebird ×1
console.log ×1
html ×1
overriding ×1
q ×1