小编yos*_*reb的帖子

使用Promises纠正多路流的模式

所以我过去几天一直在玩承诺,只是试图转换一些项目,使用承诺,但我已经多次修复这个问题.

在阅读文章和教程时,一切看起来都很流畅:

getDataFromDB()
.then(makeCalculatons)
.then(getDataFromDB)
.then(serveToClient)
Run Code Online (Sandbox Code Playgroud)

但实际上,它不是那样的.
程序有很多"if conditions"改变整个流程:

getDataFromCache(data).then(function(result){
    if(result){
        return result;
    }else{
        return getDataFromDB();
    }
}).then(function(result){
    if(result){
        serveToClient() //this does not return a promise, so undefined returned...
    }else{
        return getDataFromWebService(); //this does return a promise, 
    }
}).then(function(result){
    //i dont want to reach here if i already serveToClient()...
    //so i basically have to check "if(result)" for all next thens
    if(result){
       //do more stuff
    }
}).then(...
Run Code Online (Sandbox Code Playgroud)

我有两个主要问题:

  1. 我发现自己ifthen回调中添加了很多条件.
  2. 我仍然进入下一个then回调,即使我已经完成了(serveToClient)


我是否遵循了正确的模式?

javascript promise es6-promise

6
推荐指数
1
解决办法
142
查看次数

使用promise的异步递归

所以我试图将我的代码转移到"Promise world",并且在很多地方,当我不得不"循环"异步功能时 - 我只是以这种方式使用递归

function doRecursion(idx,callback){
    if(idx < someArray.length){
        doAsync(function(){
            doRecursion(++idx,callback)
        });
    }else{
        callback('done!')
    }
}
doRecursion(0,function(msg){
    //...
});
Run Code Online (Sandbox Code Playgroud)

现在我正试图改变进入Promise世界,我很困惑

var Promise = require('bluebird')
function doRecursion(idx){
    return new Promise(function(resolve){
        if(idx < someArray.length){
            doAsync(function(){
                //... doRecursion(++idx)
                // how do i call doRecusion here....
            });
        }else{
            resolve('done!')
        }
    });
}
doRecursion(0).then(function(msg){
    //...
});
Run Code Online (Sandbox Code Playgroud)

谢谢.

javascript recursion node.js promise

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

window.postMessage与Ajax的优缺点

我最近了解了window.parent.postMessage的HTML 5 API,并且想知道使用该代码与简单的ajax调用有什么优缺点,

例如,在客户端上为e.origin ==='www.example.com'创建一个消息事件的侦听器,并在www.example.com上创建一个包含以下内容的页面:

window.parent.postMessage(data,'*');
Run Code Online (Sandbox Code Playgroud)

javascript ajax

3
推荐指数
1
解决办法
599
查看次数

标签 统计

javascript ×3

promise ×2

ajax ×1

es6-promise ×1

node.js ×1

recursion ×1