相关疑难解决方法(0)

JavaScript ES6承诺循环

for (let i = 0; i < 10; i++) {
    const promise = new Promise((resolve, reject) => {
        const timeout = Math.random() * 1000;
        setTimeout(() => {
            console.log(i);
        }, timeout);
    });

    // TODO: Chain this promise to the previous one (maybe without having it running?)
}
Run Code Online (Sandbox Code Playgroud)

以上将给出以下随机输出:

6
9
4
8
5
1
7
2
3
0
Run Code Online (Sandbox Code Playgroud)

任务很简单:确保每个promise只在另一个(.then())之后运行.

出于某种原因,我找不到办法.

我尝试了生成函数(yield),尝试了返回promise的简单函数,但在一天结束时它总是归结为同样的问题:循环是同步的.

使用异步我只是使用async.series().

你是如何解决的?

javascript es6-promise

103
推荐指数
4
解决办法
10万
查看次数

JavaScript Promise Callback是否异步执行

假设我有这个代码

function y(resolve, reject)
{
  console.log("Result");
  resolve();
}  

var promise = new Promise(y);
Run Code Online (Sandbox Code Playgroud)

我想知道的是该函数是否y将异步执行.

javascript promise es6-promise

14
推荐指数
2
解决办法
2515
查看次数

对未使用延迟[反]模式而尚未创建的承诺的承诺

问题1:在给定时间只允许一个API请求,因此真实的网络请求排队,而尚未完成的请求.应用程序可以随时调用API级别并期望获得回报.当API调用排队时,将在未来的某个时刻创建网络请求的承诺 - 返回应用程序的内容是什么?这就是如何通过延迟的"代理"承诺来解决它:

var queue = [];
function callAPI (params) {
  if (API_available) {
    API_available = false;
    return doRealNetRequest(params).then(function(data){
      API_available = true;
      continueRequests();
      return data;
    });
  } else {
    var deferred = Promise.defer();
    function makeRequest() {
      API_available = false;
      doRealNetRequest(params).then(function(data) {
        deferred.resolve(data);
        API_available = true;
        continueRequests();
      }, deferred.reject);
    }
    queue.push(makeRequest);
    return deferred.promise;
  }
}

function continueRequests() {
  if (queue.length) {
    var makeRequest = queue.shift();
    makeRequest();
  }
}
Run Code Online (Sandbox Code Playgroud)

问题2:某些API调用被去抖动,因此要发送的数据会随着时间的推移而累积,然后在达到超时时批量发送.调用API的应用程序期待作为回报的承诺.

var queue = null;
var timeout = 0;
function callAPI2(data) {
  if …
Run Code Online (Sandbox Code Playgroud)

javascript promise deferred

7
推荐指数
1
解决办法
780
查看次数

什么时候有人需要创建延期?

现在看来,创建延迟对象通常不鼓励使用ES6风格的Promise构造函数.是否存在使用延迟需要(或者更好地某种方式)的情况?

例如,在此页面上,给出以下示例作为使用延迟的理由:

function delay(ms) {
    var deferred = Promise.pending();
    setTimeout(function(){
        deferred.resolve();
    }, ms);
    return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)

但是,这可以使用Promise构造函数完成:

function delay(ms) {
    return new Promise(function(resolve, reject){
        setTimeout(function(){
            resolve();
        }, ms);
    });
}
Run Code Online (Sandbox Code Playgroud)

javascript promise ecmascript-6 bluebird es6-promise

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