相关疑难解决方法(0)

承诺不仅仅是回调吗?

我已经开发了几年的JavaScript,我根本不理解有关承诺的大惊小怪.

似乎我所做的只是改变:

api(function(result){
    api2(function(result2){
        api3(function(result3){
             // do work
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

无论如何,我可以使用像async这样的库,例如:

api().then(function(result){
     api2().then(function(result2){
          api3().then(function(result3){
               // do work
          });
     });
});
Run Code Online (Sandbox Code Playgroud)

哪个代码更多,可读性更低.我没有在这里获得任何东西,它也不会突然神奇地"平坦".更不用说必须将事物转换为承诺.

那么,这里的承诺有什么大惊小怪?

javascript callback promise q bluebird

402
推荐指数
7
解决办法
9万
查看次数

JavaScript中Deferred,Promise和Future之间有什么区别?

延期,承诺和期货有什么区别?
这三者背后是否有普遍认可的理论?

javascript future promise deferred

297
推荐指数
5
解决办法
10万
查看次数

将承诺转换为蓝鸟

我找到了一个使用promises的现有库,但它不使用bluebird.库函数不与所有的额外功能蓝鸟确实喜欢.map().tap().我如何将"正常"或"非蓝鸟"的承诺转换为蓝鸟承诺,蓝鸟提供的所有额外功能?

我尝试将现有的承诺包装起来Promise.promisify,Promise.resolve而且似乎都没有效果.

javascript node.js promise bluebird

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

有没有办法判断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.any() 和 Promise.race() 有什么区别

Promise.any()和之间有什么区别Promise.race(),它们的用法有何不同?


来自MDN

此外,与返回第一个已解决值的 Promise.race() 不同,此方法返回第一个已解析值。此方法将忽略所有被拒绝的承诺,直到第一个解决的承诺。

所以这让我想到了resolvestable之间的区别。然后将我带到 MDN 承诺页面然后将我带到状态和命运

定居不是一种状态,只是一种语言上的便利。

所以我们有Promise.anyPromise.race为了语言方便?即没有区别。这种平等的另一个例子是“命运未决的承诺必然是未决的”。和“如果一个承诺不是待定的,即如果它被实现或被拒绝,我们说它被解决了。”。

所以如果一个 promise 被解决了,它就不是未解决的,所以它不是挂起的。那么,如果它不是待定的,它就已经解决了。所以解决了===解决了。

javascript promise

17
推荐指数
1
解决办法
5528
查看次数

q.js:resolve()和fulfill()之间的区别

我还不清楚调用解析器的resolve()和fulfill()之间的区别?我看到了很多功能和术语"解决承诺"和"履行承诺".

我什么时候应该使用它们?

javascript asynchronous promise q

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

在Protractor/WebDriverJS中拒绝了承诺

WebDriverJS和Protractor本身完全基于承诺的概念:

WebDriverJS(以及Protractor)API完全是异步的.所有功能都返回承诺.WebDriverJS维护一个待处理的承诺队列,称为控制流,以保持执行的有序性.

并且,根据定义:

promise是一个表示值的对象,或者是值的最终计算.每个承诺都以挂起状态开始,可以使用值成功解析,也可以拒绝指定错误.

关于承诺拒绝的最后一部分是我不完全理解并且未在Protractor中处理过的事情.我们看到和编写的一种常见模式是使用then()并为成功解决的承诺提供功能:

element(by.css("#myid")).getAttribute("value").then(function (value) {
    // do smth with the value
});
Run Code Online (Sandbox Code Playgroud)

问题:

是否有可能由任何Protractor/WebDriverJS函数返回的承诺无法成功解决并被拒绝?我们真的应该担心并处理它吗?

javascript testing selenium promise protractor

13
推荐指数
1
解决办法
2144
查看次数

将另一个承诺传递给承诺处理程序

我希望promise处理程序能够记录promise p1(而不是值"A"),因为直接console.log调用它p1.但是,它以某种方式记录"A".承诺如何在p1没有被调用的情况下自动解析为"A"?例如,console.log(p1)不按预期直接输出"A".幕后会发生什么事吗?

var p1 = new Promise(function(resolve, reject) {
  resolve("A");
});

var p2 = new Promise(function(resolve, reject) {
  resolve(p1);
});

p2.then(function(v) {
  console.log(v)
});
Run Code Online (Sandbox Code Playgroud)

编辑:我明白,打电话

p1.then((v) => return v))
Run Code Online (Sandbox Code Playgroud)

返回一个用值v实现的新promise.除非我在这里严重遗漏了某些东西,否则第二个promise构造函数中的"p1"引用应该直接传递给console.log,从而产生块

var p2 = new Promise(function(resolve, reject) {
  resolve(p1);
});

p2.then(function(v) {
 console.log(v)
});
Run Code Online (Sandbox Code Playgroud)

变得

console.log(p1).
Run Code Online (Sandbox Code Playgroud)

由于使用p1直接调用console.log,而不是p1.then(...)的结果,因此p1不应该像打印另一个程序一样解析为值"A"

var promise = new Promise(function(resolve, reject) {
  resolve("B")
})

console.log(promise)
Run Code Online (Sandbox Code Playgroud)

不会产生字符串"B".

编辑2:我有一种误解,认为传递给执行程序的resolve参数是未实现函数的包装器,这引起了大量的混淆.检查为什么Promise构造函数需要一个在完成时调用'resolve'的函数,但'then'却没有 - 它返回一个值而不是?更多细节.

javascript promise es6-promise

13
推荐指数
2
解决办法
2797
查看次数

概念 - 提炼承诺如何运作?

我看过很多实现,它们看起来都很不一样,我无法真正提炼出承诺的本质.

如果我不得不猜测它只是一个在回调触发时运行的函数.

有人可以在几行代码中实现最基本的承诺.

例如,从这个答案

片段1

var a1 = getPromiseForAjaxResult(ressource1url);
a1.then(function(res) {
    append(res);
    return a2;
});
Run Code Online (Sandbox Code Playgroud)

如何传递函数以then了解何时运行.

也就是说,它如何传递回ajax在完成时触发的回调代码.

片段2

// generic ajax call with configuration information and callback function
ajax(config_info, function() {
    // ajax completed, callback is firing.
});
Run Code Online (Sandbox Code Playgroud)

这两个片段有何关联?

猜测:

// how to implement this

(function () {
    var publik = {};
        _private;
    publik.then = function(func){
        _private = func;
    };
    publik.getPromise = function(func){
        // ??
    };
    // ??
}())
Run Code Online (Sandbox Code Playgroud)

javascript

11
推荐指数
2
解决办法
3262
查看次数

JS Promises:Fulfill vs Resolve

我理解Promise存在于以下三种状态之一:Promise可以是待处理(未解析),履行(成功解决)或拒绝(解决失败).

阅读A + Promise SpecMDN的文档,我很困惑他们都承认已完成被拒绝的状态,但在Promise构造函数的定义中,他们指定了两个回调:resolvereject.我们似乎可以互换地使用这两个术语; 他们不是.

并不意味着成功:

re·solve /r??zälv/ verb
1. settle or find a solution to (a problem, dispute, or contentious matter).
Run Code Online (Sandbox Code Playgroud)

是否意味着成功:

ful·fill /fo?ol?fil/ verb
1. bring to completion or reality; achieve or realize (something desired, promised, or predicted).
2. carry out (a task, duty, or role) as required, pledged, or expected.
Run Code Online (Sandbox Code Playgroud)

当我们真正实现承诺时,为什么我们在这里使用决心?有没有在其中的价值,我们通过一个实例解决可能会导致无极是拒绝 …

javascript promise

11
推荐指数
2
解决办法
4995
查看次数