【Promise】Promise實現請求超時處理(加強版)


  昨天閑來無事,於是把之前寫過的promise優化了一下,代碼如下:

/*寫文件、追加寫、讀文件*/
var fs = require('fs');

function wrapper(fn,context) {
    var args = Array.prototype.slice.call(arguments,2);
    return new Promise((resolve,reject) => {
        args.push((err,data) => {
            err ? reject(err) : resolve(data);
        });
        fn.apply(context,args);
    });
}

wrapper(fs.writeFile,fs,'message.txt','word')
    .then(() => wrapper(fs.appendFile,fs,'message.txt','word'))
    .then(() => wrapper(fs.readFile,fs,'message.txt','word'))
    .then(data => console.log(data))
    .catch(err => console.log(err));


/*獲取員工id、並發獲取兩個接口信息、讀信息*/
var http = require('http');
var url = require('url');

function delayPromise(ms) {
    return new Promise((resolve,reject) => {
        setTimeout(reject, ms);
    });
}

function get(url,ms) {  
    return new Promise.race([
        delayPromise(ms),
        wrapper(request,null,url).then(data => {
            return JSON.parse(data);
        })
    ]);
    
}

get('http://demos.so/result/homework.promise.userInfo')
    .then( data => {
        return Promise.all([get('http://demos.so/result/userid=' + args['_id']), get('http://demos.so/result/student=' + args['_id'])])
    }
    .then( data => console.log(data))
    .catch( err => console.log(args));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM