相关疑难解决方法(0)

如何将现有的回调API转换为承诺?

我想使用promises,但我有一个回调API,格式如下:

1. DOM加载或其他一次性事件:

window.onload; // set to callback
...
window.onload = function() {

};
Run Code Online (Sandbox Code Playgroud)

2.平原回调:

function request(onChangeHandler) {
    ...
}
request(function() {
    // change happened
    ...
});
Run Code Online (Sandbox Code Playgroud)

3.节点样式回调("nodeback"):

function getStuff(dat, callback) {
    ...
}
getStuff("dataParam", function(err, data) {
    ...
})
Run Code Online (Sandbox Code Playgroud)

4.具有节点样式回调的整个库:

API;
API.one(function(err, data) {
    API.two(function(err, data2) {
        API.three(function(err, data3) {
            ...
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

如何在promises中使用API​​,我该如何"宣传"它?

javascript callback node.js promise bluebird

680
推荐指数
12
解决办法
20万
查看次数

使用Promise等待轮询条件满足

我需要创建一个JavaScript Promise,在特定条件为真之前无法解析.假设我有第三方库,我需要等到该库中存在某种数据条件.

我感兴趣的场景是除了简单的轮询之外无法知道何时满足这个条件的场景.

我可以创建一个等待它的承诺 - 这段代码可以工作,但有没有更好或更简洁的方法解决这个问题?

function ensureFooIsSet() {
    return new Promise(function (resolve, reject) {
        waitForFoo(resolve);
    });
}

function waitForFoo(resolve) {
    if (!lib.foo) {
        setTimeout(waitForFoo.bind(this, resolve), 30);
    } else {
        resolve();
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

ensureFooIsSet().then(function(){
    ...
});
Run Code Online (Sandbox Code Playgroud)

我通常会实现最大轮询时间,但不希望这样在这里解决问题.

javascript promise

43
推荐指数
3
解决办法
2万
查看次数

标签 统计

javascript ×2

promise ×2

bluebird ×1

callback ×1

node.js ×1